为什么Cocoa偶尔会返回一个空字符串?

Ste*_*ton 5 iphone cocoa memory-management objective-c

我的应用程序中有一些代码如下所示:

char *hash = (char*) sqlite3_column_text(get_bookmark, 0);
NSString* postHash = [NSString stringWithUTF8String:hash];
Run Code Online (Sandbox Code Playgroud)

这对我来说每次都适用; 我从来没有见过它不能正常工作.我的大多数用户都没有遇到问题(据我所知).但是我发现某些用户在某些时候postHash是一个空字符串(@"").

有谁能解释为什么?

更多背景/推测:

这似乎只发生在越狱手机上.他们有什么不同吗?我认为通常可用的内存较少.还有什么可以贡献的吗?

postHash用于表格单元格,偶尔看到正确填充,所以我有理由相信数据库调用应该工作.事实上,如果数据库也有一个空字符串,那是因为代码非常相似,所以问题仍然存在.

hash肯定是以非NULL值返回.如果我在这里强制NULL,应用程序崩溃.同样地,postHash不会nil因为崩溃应用程序而崩溃(出于同样的原因).

我在想这可能与记忆有关.如果该方法在-didReceiveMemoryWarning调用之前尝试分配太多内存会发生什么?我知道,在某些时候,Springboard会弹出应用程序.但是Cocoa有可能在这里返回一个空字符串而不是预期的值吗?我听说过一些报告,据我所知,只能由一个空字符串出现,而这个字符串应该存在更长的时间.

欢迎任何其他猜测,理论或想法.

Pet*_*sey 6

但是我发现某些用户在某些时候postHash是一个空字符串(@"").

有谁能解释为什么?

因为hash是一个空字符串(hash[0] == '\0').

  • 这不是"最可能出现的情况"; 这是唯一*场景.NULL会给你一个例外.任何非空字符串都会获得非空字符串.只有空字符串才能获得空字符串.简单证明:NSLog的长度为(strlen(hash))和length out([postHash length]). (2认同)