[英]XCode Instruments has found a memory leak: why?
我正在對我正在創建的應用程序進行調試,但是運行儀器我發現了一個我無法理解的內存泄漏。
如果我嘗試按照Instruments建議修改代碼,我的應用程序崩潰是因為
消息發送到解除分配的實例
有人能幫我嗎?
- (void) objectAtIndex:(int)index {
SpecialObject *specialObj = [SpecialObject sharedInstance];
id model = [self.datasource objectAtIndex:index];
if ([model isKindOfClass:[ClassA class]]) {
ClassA *objA = (ClassA *)model;
specialObj.title = objA.title;
} else if ([model isKindOfClass:[ClassB class]]) {
ClassB *objB = (ClassB *)model;
specialObj.title = objB.title;
}
}
self.datasource
是NSMutableArray
而specialObj.title
是NSString
它們被定義為@property(nonatomic, retain)
。
我的問題是,儀器告訴我這些2
ClassA *objA = (ClassA *)model;
ClassB *objB = (ClassB *)model;
是泄漏,但如果我釋放objA
和objB
我的應用程序崩潰。
謝謝你的幫助!
我的猜測是你永遠不會釋放數據源。 假設您沒有使用ARC,那么在dealloc
方法中,您應該擁有
[self setDataSource: nil];
要么
[instanceVariableThatBacksDataSourceProperty release];
許多人做前者,但Apple建議使用后者,以便在解除分配期間不會觸發KVO。
泄漏和你的例外是不同的事情。 幾乎可以肯定的是,釋放了一些你不應該發布的東西。
事實上你們兩者都表明你對Objective-C內存管理的理解不是很好。
您應該首先集中精力理解異常,這樣做的第一步是查看異常回溯 。
經過一些搜索后我發現了問題:XCode 通常會告訴泄漏的位置,但有時它會給你一個可能的位置。
這意味着內存泄漏在程序流程中的某個地方進入XCode指示的點,而不一定恰好在它所說的位置。
希望這可以在將來幫助別人!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.