我认为这两种方法是(内存分配方式)等效的,但是,如果我使用我认为方便的方法(在下面注释掉)并且当我切换时,我会在调试器中看到“超出范围”和“NSCFString”对于更明确的方法,我的代码停止崩溃!请注意,我从 sqlite3 查询中获取了存储在容器中的字符串。
p = (char*) sqlite3_column_text (queryStmt, 1);
// GUID = (NSString*) [NSString stringWithUTF8String: (p!=NULL) ? p : ""];
GUID = [[NSString alloc] initWithCString:(p!=NULL) ? p : "" encoding:NSUTF8StringEncoding];
另请注意,如果我查看调试器中的值并使用 NSLog 打印它们,它们看起来是正确的,但是,我认为没有分配新内存并复制了值。相反,内存指针被存储-超出范围-稍后引用-崩溃!