【发布时间】:2010-10-15 18:14:34
【问题描述】:
我想将 NSString 转换为 const char * 以访问 sqlite DB。
这行得通:
NSString *queryStatementNS = @"select title from article limit 10";
const char *queryStatement = [queryStatementNS UTF8String];
这会导致模拟器崩溃(没有任何堆栈跟踪):
NSString *queryStatementNS = [NSString stringWithFormat:@"select title from article limit %d", 10];
const char *queryStatement = [queryStatementNS UTF8String];
谁能告诉我,StringWithFormat 方法在转换为 UTF8(或使用 cStringUsingEncoding:NSASCIIStringEncoding 转换为 ASCII)时发生了哪些变化?当根本没有向 stringWithFormat 传递任何参数时,也会发生同样的崩溃。会不会和内存管理有关?
【问题讨论】:
-
stringWithFormat 调用的位置或方法是否与 UTF8String 方法不同?如果是这样,则第二个示例中的自动释放对象 queryStatementNS 可能已被释放。第一个示例使用一个常量,它不是自动释放对象。
-
这一切都在一个地方,就像在示例中一样。但是,我添加了一个 [queryStatementNS 保留];在这两行之间,现在它可以工作了。
标签: iphone objective-c xcode