我无法在下面释放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;
}
答案 0 :(得分:2)
嗯,问题是returnTheArray
不是分析器识别为返回保留值的名称 - 这就是它抱怨的原因。因此,要么重命名方法,要么返回自动释放的值。但是如果后者你需要确保返回值的“消费者”适当地处理它 - 如果值必须持续超过下一个自动释放池排放操作,则保留它。
答案 1 :(得分:0)
尝试:
NSMutableArray *tempArray = [NSMutableArray arrayWithArray:[temp objectForKey:theKey]];