我這個簡單的代碼的Xcode工具泄漏不能識別財產泄漏
@interface chatApp4Message : NSObject {
NSString* line;
}
@property (nonatomic, retain) NSString* line;
@end
@implementation chatApp4Message
@synthesize line;
@end
正如你所看到的,我不釋放行屬性。但是,在運行下的Xcode工具泄漏下面這個簡單的代碼的時候,我沒有得到任何的內存泄漏跡象
for (int i=1; i< 100; i++){
chatApp4Message* msg = [[chatApp4Message alloc] init];
msg.line = @"aaaaaa";
[msg release]
}
真的?我認爲@ @ synthesize''d'@property(retain)'會釋放它的ivar,然後保留新的。沒有泄漏,直到dealloc,並且只有當'[line release]'丟失..並且當然'line = nil'在初始化過程中保持安全和整潔 – ohhorob 2010-06-30 15:48:47
這都是真的,爲了正確處理內存,您需要釋放line ivar dealloc方法。我只是試圖解釋(可能很糟糕 - 抱歉,我不是母語的人)爲什麼在**那個特定的例子中沒有內存泄漏。字符串文字的行爲不像普通的動態創建的obj-c對象(參見發佈的鏈接) - 例如,您可以嘗試釋放/保留字符串文字並檢查它們是否不影響文字的保留計數。 – Vladimir 2010-06-30 16:14:31
即使您沒有在chatApp4Message類中重寫它,dealloc方法也會在[msg發佈]後立即調用。無論如何,ivars(至少是obj-c對象)默認初始化爲nil - 你不需要在init方法中將它們設置爲nil。 – Vladimir 2010-06-30 16:19:30