簡體   English   中英

XCode Instruments發現內存泄漏:為什么?

[英]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.datasourceNSMutableArrayspecialObj.titleNSString

它們被定義為@property(nonatomic, retain)

我的問題是,儀器告訴我這些2

ClassA *objA = (ClassA *)model;
ClassB *objB = (ClassB *)model;

是泄漏,但如果我釋放objAobjB我的應用程序崩潰。

謝謝你的幫助!

我的猜測是你永遠不會釋放數據源。 假設您沒有使用ARC,那么在dealloc方法中,您應該擁有

[self setDataSource: nil];

要么

[instanceVariableThatBacksDataSourceProperty release];

許多人做前者,但Apple建議使用后者,以便在解除分配期間不會觸發KVO。

泄漏和你的例外是不同的事情。 幾乎可以肯定的是,釋放了一些你不應該發布的東西。

事實上你們兩者都表明你對Objective-C內存管理的理解不是很好。

您應該首先集中精力理解異常,這樣做的第一步是查看異常回溯

經過一些搜索后我發現了問題:XCode 通常會告訴泄漏的位置,但有時它會給你一個可能的位置。

這意味着內存泄漏在程序流程中的某個地方進入XCode指示的點,而不一定恰好在它所說的位置。

希望這可以在將來幫助別人!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM