我一直在開發一個應用程序一段時間,現在我已經到了「儀器泄漏」部分。ivars以及如何正確實例化它們的值(iPhone)
我記得有一件事在我學習的幾個月前讓我對ivars感到困惑。我把所有的事情都放在了信心之上,並且遵循了Apple和其他人的做法。據我所知,由SDK生成的訪問器將負責內存管理。
但是,ivars如何初始化?
如果我在我的界面中有這樣的ivar;
@interface
{
NSArray *results;
}
@property(nonatomic, retain) NSArray *results;
@end
@implementation
@synthesize results;
如果我在運行時嘗試這樣做:
[self setResults:allReadyInitializedArray];
它會崩潰,告訴我這個結果對象未初始化。如果我然而這樣做:
self.results = [[NSArray alloc] init]; //Im assigning this property memory, but hasn't the SDK already done that?
[self setResults:allReadyInitializedArray];
它會工作,但它會顯然泄漏內存。
我的印象是,使用生成的 訪問器將釋放舊的值,然後設置新的,意思是 上面應該出來的舊值釋放和新的+1保留計數。
它是否具體與NSArray/NSMutableArray類型的伊娃有關,我不記得它與其他Ivars一直存在問題。
的問題一直特別突出的在我的XML解析器,在那裏我不斷地需要設置伊娃值,使用它,覆蓋此值,使用新值等
會有人幫我概述正確的方式「從」:@property() - > @synthesize - >使用伊娃 - > dealloc?
我已經閱讀了內存管理文檔,我試過在我的理解中尋找一些債務文檔,但似乎即使我每天都使用ivars,但我不明白後面發生了什麼場面。
你在第一次做它的方式看起來正確。你能發佈你得到的錯誤消息的確切文本嗎? – kubi 2010-03-01 13:42:19