我正在尝试返回已从plist初始化的NSString。
如果我注释掉我的发布行,则此代码有效。然而,我想从内存中释放这些对象,因为我不再需要它们。
我认为'initWithString'会将目标字符串的内容复制到我的新字符串中,这意味着我可以安全地释放NSMutableArray。但事实并非如此。为什么不呢?
+ (NSString*) genImage {
NSString *path = [[NSBundle mainBundle] pathForResource:
@"Images" ofType:@"plist"];
NSMutableArray *arrayOfImages = [[NSMutableArray alloc] initWithContentsOfFile:path];
NSLog(@"%d", [arrayOfImages count]);
int indexToLoad = 0;
NSString *res = [[NSString alloc] initWithString:[arrayOfImages objectAtIndex:indexToLoad] ];
[arrayOfImages release];
[path release];
return res;
}
答案 0 :(得分:2)
您不保留-[NSBundle pathForResource:ofType:]
(path
变量)的返回值,因此无需释放它(这样做很可能会导致崩溃)。但是,您应该自动发布res
,因为做保留它。您可以将最后一行更改为
return [res autorelease];