Sni*_*ips 1 iphone objective-c
我有一个可靠运行的复杂应用程序,但我很困惑为什么我需要保留一个特定的NSArray('sources')两次以防止崩溃(虽然在控制台上没有报告异常,但应用程序崩溃并返回到跳板).
下面包含一段代码.有太多的代码要粘贴它,但你知道没有显式调用来释放数组.'sources'是一个实例变量.
如果我只保留一次(或根本不保留)数组,我就会崩溃.有两个保留,该应用程序非常稳定.
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Sources" ofType:@"plist"];
sources = [[NSArray arrayWithContentsOfFile:plistPath] autorelease];
[sources retain];
[sources retain];
Run Code Online (Sandbox Code Playgroud)
关于为什么我需要两次保留这个阵列的想法.提前致谢.
Jef*_*ley 10
您正在使用+arrayWithContentsOfFile:,它返回一个自动释放的对象,然后再次自动释放它.取出电话-autorelease,你会没事的.您可以重写它:
sources = [[NSArray arrayWithContentsOfFile:plistPath] retain];
Run Code Online (Sandbox Code Playgroud)
这里是显式调用释放阵列.autorelease同样明确release- 它只是稍后发生.不仅如此,首先自动释放阵列是错误的,因为你没有拥有它.一retain权利要求所述阵列的所有权是必要的.第二个通过平衡不正确的使用来防止崩溃autorelease.