NSMutableArray中的内存泄漏,无法自动释放

时间:2012-02-26 14:20:35

标签: objective-c xcode cocos2d-iphone

我无法在下面释放tempArray ... tempArray是一个泄漏,我尝试了返回[tempArray autorelease]并导致崩溃。有谁知道如何消除tempArray中的内存泄漏?

+(NSMutableArray*) returnTheArray:(NSString*)thePath forTheKey:(NSString*)theKey {

NSString *errorDesc = nil;
NSPropertyListFormat format;
NSString *plistPath;
NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                          NSUserDomainMask, YES) objectAtIndex:0];
NSString *testString = [thePath stringByAppendingString:@".plist"];
plistPath = [rootPath stringByAppendingPathComponent:testString];

if (![[NSFileManager defaultManager] fileExistsAtPath:plistPath]) {
    plistPath = [[NSBundle mainBundle] pathForResource:thePath ofType:@"plist"];

}
NSData *plistXML = [[NSFileManager defaultManager] contentsAtPath:plistPath];
NSDictionary *temp = (NSDictionary *)[NSPropertyListSerialization
                                      propertyListFromData:plistXML
                                      mutabilityOption:NSPropertyListMutableContainersAndLeaves
                                      format:&format
                                      errorDescription:&errorDesc];
 if (!temp) {
 CCLOG(@"Error reading plist: %@, format: %d", errorDesc, format);
 }

NSMutableArray *tempArray = [[NSMutableArray alloc] initWithArray:[temp objectForKey:theKey]];

return tempArray;

}

2 个答案:

答案 0 :(得分:2)

嗯,问题是returnTheArray不是分析器识别为返回保留值的名称 - 这就是它抱怨的原因。因此,要么重命名方法,要么返回自动释放的值。但是如果后者你需要确保返回值的“消费者”适当地处理它 - 如果值必须持续超过下一个自动释放池排放操作,则保留它。

答案 1 :(得分:0)

尝试:

NSMutableArray *tempArray = [NSMutableArray arrayWithArray:[temp objectForKey:theKey]];