これらの2つの方法は(メモリ割り当てに関して)同等だと思いましたが、便利な方法(以下にコメント)を使用して切り替えたときに、デバッガーに「範囲外」と「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で出力した場合、それらは正しいように見えましたが、新しいメモリが割り当てられ、値がコピーされたとは思わないことにも注意してください。代わりに、メモリポインタが保存されました-スコープ外になりました-後で参照されます-クラッシュします!