【发布时间】:2012-03-06 03:18:14
【问题描述】:
我有以下方法:
+ (NSString*) getMD5HashFromFile:(NSString*)filePath {
CFStringRef md5hash = FileMD5HashCreateWithPath((CFStringRef)filePath, FileHashDefaultChunkSizeForReadingData);
NSString *hashStr = (NSString*)md5hash;
CFRelease(md5hash);
return hashStr;
}
我在模拟器上遇到随机崩溃,大约每 20-30 次执行中就有 1 次。这不一致的事实并没有帮助我更深入地挖掘。
现在我再次看到代码,很明显md5hash 在返回之前被释放,这意味着返回的对象无效。返回的值以一致的方式在另一个方法中使用,有时会崩溃,但并非总是如此。我的问题是为什么这种情况很少发生,而且并不总是发生。
这与 Obj-C 和 C 代码的混合以及自动释放池的工作方式有关吗?
注意:该错误似乎已通过使用 NSString *hashStr = [NSString stringWithString:(NSString*)md5hash] 修复,这对我来说完全有意义。
【问题讨论】:
标签: objective-c ios crash