Objective C - NSString - 内存基础知识

时间:2011-06-22 14:29:01

标签: objective-c

我正在尝试返回已从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;

}

1 个答案:

答案 0 :(得分:2)

您不保留-[NSBundle pathForResource:ofType:]path变量)的返回值,因此无需释放它(这样做很可能会导致崩溃)。但是,您应该自动发布res,因为保留它。您可以将最后一行更改为

return [res autorelease];