【发布时间】:2012-03-14 18:00:31
【问题描述】:
下面的结果是什么?
NSString *myStr = [[[NSString alloc] initWithString:@"Hello World."] autorelease];
myStr = [NSString stringWithString:@"Hello Again."];
myStr 是否被正确释放或崩溃,因为我们会在 myStr 上调用 autorelease,而 myStr 现在已设置为已自动释放的字符串?
【问题讨论】:
-
只要使用ARC,它就能解决所有这些问题。与仅使用苹果推荐的 (ARC) 相比,向后兼容性要麻烦得多。
-
@RichardJ.RossIII 在所有情况下都不完全正确。例如,一些第三方库不支持 ARC。内存管理在 iOS 中仍然是一个必要的概念。
-
@MikeD 只需使用 -fno-objc-arc 编译库。 ARC 仍然是最好的选择。
-
我们的应用程序非常庞大,我认为过渡到 ARC 需要很长时间。根据静态分析器,我们目前正在修复 500 多个内存问题:
-
有趣的问题(虽然相当容易测试)。
标签: objective-c cocoa memory-management autorelease alloc