2010-08-18 79 views
0

任何人都可以告訴我爲什麼下面的代碼泄漏?儀器告訴我有關2次泄漏。的2行那顯然導致泄漏是:儀器泄漏告訴初始化對象時的內存泄漏

Person *pers = [[Person alloc] init]; 

NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithContentsOfFile:path]; 

整個列表如下:

PersonViewController *personenDatenController = [[PersonViewController alloc] 
      initWithStyle:UITableViewStyleGrouped]; 

personenDatenController.view.backgroundColor = [UIColor clearColor]; 

Person *pers = [[Person alloc] init]; 

NSString *path = [[self class] pathForDocumentWithName:@"Person.plist"]; 
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:path]; 
if (!fileExists) { 
    NSLog(@"file does not exist yet"); 
    NSString *content = @""; 
    NSData *fileContents = [content dataUsingEncoding:NSUTF8StringEncoding]; 
    [[NSFileManager defaultManager] createFileAtPath:path 
      contents:fileContents 
      attributes:nil]; 

} 

NSMutableDictionary *dict = [[NSMutableDictionary alloc] 
     initWithContentsOfFile:path]; 
[pers setVorName:[dict valueForKey:@"vorName"]]; 
[pers setNachName:[dict valueForKey:@"nachName"]]; 
[pers setStrassenName:[dict valueForKey:@"strassenName"]]; 
[pers setHausNummer:[dict valueForKey:@"hausNummer"]]; 
[pers setPlz:[dict valueForKey:@"plz"]]; 
[pers setStadt:[dict valueForKey:@"stadt"]]; 
[pers setHandyNummer:(NSInteger*)[dict valueForKey:@"handyNummer"]]; 
[pers setEmail:[dict valueForKey:@"email"]]; 
[pers setSteuerSatz:[[dict valueForKey:@"steuerSatz"] floatValue]]; 
[dict release]; 


    [personenDatenController setPerson:pers]; 

    [navigationController pushViewController:personenDatenController animated:YES]; 

[personenDatenController release]; 

    [pers release]; 

變量 「路徑」 來源於以下靜態方法:

+ (NSString *)pathForDocumentWithName:(NSString *)documentName 
{ 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *tempPath = [documentsDirectory stringByAppendingPathComponent:documentName]; 

    return tempPath; 
} 

謝謝我ñ先進的你的幫助!

親切的問候

菲爾

+0

看起來不錯。也許讓靜態分析器看看它。請記住,只要personenDataController可見,人物對象*就應該在周圍 - 如果您的快照計時不準,可能會錯誤地將其報告爲泄漏。最後,也許這個PersonViewController泄漏這些對象。 – Eiko 2010-08-18 11:52:22

回答

0

假設setPerson呼叫保留在個人。您的PersonViewController會釋放該人物對象上的釋放嗎?如果是這樣,在那裏放一個斷點(或NSLog)並找出該人的保留數。如果它不是0,你還可以保留它嗎?

0

謝謝你們的回覆。 PersonViewController確實保留了person對象,但是我爲dealloc中的person對象放置了一個release。該retaincount是好的。 我將Person對象的初始化移動到了PersonViewController,現在一切都很好。這對我來說似乎很奇怪。

謝謝

問候