以下のtempArrayを解放する際に問題が発生しています... tempArrayがリークで、返されました[tempArray autorelease]がクラッシュしました。誰もがtempArrayのメモリリークを取り除く方法を知っていますか?NSMutableArrayのメモリリークは、自動解放できません。
+(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;
}
おかげホットリックスが、私は「[tempArray自動リリース]を返す」に変更し、すべての「消費者」を保持することを確認しましたので、メソッドの名前を変更しても問題が解決する方法を見つけ出すことができませんでした戻り値の理想的なソリューションのようには見えませんが、メモリリークを解決しました – user1233894
アナライザは、メソッドの名前に期待しています。 "new"、 "alloc"、または "copy"で始まるものは、保持された値を返すことが期待されます。他の名前は、保持されている値を返さないと仮定されています(返されるメソッドによって自動解放されるかもしれないし、そうでないかもしれないと考えられます - 何らかの理由で "安全"であることも知られています)。 –