2010-08-24 73 views
1

當我做「生成和分析」的Xcode給了我以下警告:對象泄露...我該如何解決它?

就行分配的對象的潛在泄漏70

  1. 方法返回一個Objective-C的對象與+1保留計數(擁有參考)

  2. 循環回到

  3. 對象上線70所分配的循環的頭部不這點之後不再引用,並且具有1的保持計數(對象泄漏)

這是代碼(線70是與「的NSString * newString」開始的一個):

for(int j = 1; j < [smokeArray count]; j++) { 

    NSString *newString = [[NSString alloc] initWithFormat:@"Data: "]; 
    int f = [[[smokeArray objectAtIndex:j] num] intValue]; 

    for (int i = 0; i<6; i++) { 
     int d = [[[[smokeArray objectAtIndex:j] dat] objectAtIndex:i] intValue]; 

     if (i>0) { newString = [newString stringByAppendingFormat:@"-%d",d]; } 
     else { newString = [newString stringByAppendingFormat:@"%d",d]; } 

    } 

    NSLog(@"%d, %@", f, newString); 
} 
+0

它與你的問題沒有關係,但是除非你拿出一些代碼,否則它看起來像inner for循環是沒用的 - 你設置的是newString的值,但沒有做任何事情。你的NSLog總是打印「X,Data:6」嗎? – blindjesse 2010-08-25 05:06:32

回答

5

做最簡單的事情是autorelease:張貼以上只是

NSString *newString = [[[NSString alloc] initWithFormat:@"Data: "] autorelease]; 

或在特定情況下:

NSString *newString = @"Data: "; 
+0

Thnaks,這工作! – Abramodj 2010-08-24 21:21:07

2

stringByAppendingFormat返回一個新的autoreleased字符串。原始newString未獲得釋放。 使用NSMutableStringappendFormat會更好。

for(int j = 1; j < [smokeArray count]; j++) { 

    NSMutableString *newString = [[NSMutableString alloc] initWithString:@"Data: "]; 
    int f = [[[smokeArray objectAtIndex:j] num] intValue]; 

    for (int i = 0; i<6; i++) { 
     int d = [[[[smokeArray objectAtIndex:j] dat] objectAtIndex:i] intValue]; 

     if (d > 0) { [newString appendFormat:@"-%d",d]; } // fixed a potential logic error (i > 0) 
     else { [newString appendFormat:@"%d",d]; } 

    } 

    NSLog(@"%d, %@", f, newString); 
    // Do something useful like set a label or property with the string 
    [newString release]; 
} 
+0

非常感謝您的建設性答案!但請編輯它,因爲它不正確:appendFormat方法不會返回一個新的字符串,它只會修改接收者。所以: [newString appendFormat:@「%d」,d]; 而不是 newString = [newString appendFormat:@「%d」,d]; – Abramodj 2010-08-24 21:20:27

+0

好的。刪除了不必要的重新分配給newString。與使用'stringWithFormat'創建新的NSString實例相比,使用NSMutableString將減少您的整體內存佔用。 – falconcreek 2010-08-25 05:03:40

相關問題