2011-05-04 74 views
1

我堅持可可內存Managagment。RetainCount內存

- (IBAction) createPush:(UIButton *)sender { 
    [create setEnabled:NO]; 
    [release setEnabled:YES]; 

    aLocation = [[Location alloc] init]; 

    // Put some Example Stuff in the Class 
    aLocation.title = @"Apartment"; 
    aLocation.street = @"Examplestreet 23"; 
    aLocation.zip = @"12345"; 
    aLocation.city = @"Exampletown"; 
    aLocation.http = @"http://google.com"; 
    aLocation.info = @"First Info Text"; 
    aLocation.info2 = @"Second Info Text, not short as the first one"; 
    aLocation.logoPath = @"http://google.de/nopic.jpg"; 

    [aLocation.pictures addObject:@"http://google.de/nopic.jpg"]; 
    [aLocation.pictures addObject:@"http://google.de/nopic.jpg"]; 
} 

- (IBAction) releasePush:(UIButton *)sender { 
    [release setEnabled:NO]; 
    [create setEnabled:YES]; 

    [aLocation release]; 
    aLocation = nil; 
} 

此代碼工作正常,如果我設置或獲取變量,但是當我稱之爲「最後」的釋放(所以保留計數爲0),它的dealloc aLocation的方法被調用,但在儀器分配你看,沒有回憶。

這裏位置的來源:

http://homes.dnsalias.com/sof/Location.m 同一鏈路上與「.H」而不是「.M」爲頭文件(很抱歉,因爲Spaming規則的)。

而且整個項目:http://homes.dnsalias.com/sof/Location.zip

感謝您的幫助,哪裏是我的失敗?丹尼斯

+0

這是執行'aLocation'的所有代碼嗎?它不會被放入數組中,例如? – 2011-05-04 18:59:01

+0

是的,這是所有!如果你想仔細觀察下載源代碼。 – 2011-05-04 19:53:30

回答

1

此代碼工作正常,如果我設置或獲取 變量,但是當我稱之爲「最後」 版本(所以保留計數爲0),它aLocation的 dealloc方法被 叫,但在儀器分配 你會看到沒有記憶被回饋。

你是什麼意思「沒有內存還給」是什麼意思?

儘管命名奇怪,aLocation的內存管理是正確的是上面的代碼(假設你已經在dealloc中發佈了它)。


爲什麼不內存使用減少當單個對象被釋放?

(意譯)

很可能是你的對象是相對較小的,因此,該單個釋放低於〜20K左右,需要儀器顯示出來。

如果您的應用由於內存使用問題崩潰,尋找一個釋放錯誤的地方開始。要做的第一件事就是回答爲什麼你的應用程序正在增加內存以及對增長負責的原因。

配置分配儀器只跟蹤實時分配。然後按總內存使用進行排序。這會告訴你什麼類型的分配消耗最多的內存。從減少開始。

Heapshot analysis可以在這些情況下是非常有效的。

+0

謝謝你的好鏈接。我以前不知道,我認爲這應該對我有幫助。 – 2011-05-05 19:35:24

0

其他相關信息在這裏,因爲連接的最大數目,我have'nt機會發表圖片...

你是什麼意思「沒有內存還給」是什麼意思?

我會告訴你儀器運行,那麼它應該很清楚。 Screenshots from Instruments run

如果需要更多詳細信息請點擊here進行儀器運行。

+0

新的答案,因爲鏈接限制... – 2011-05-05 09:20:02

0

你的代碼很好。您錯誤地記錄了儀器的輸出。沒有Location對象泄漏。

對於泄漏,請使用「泄漏」工具。它不會開火。 :-)

+0

好吧,聽起來不錯。但是,當我釋放aLocation對象時,爲什麼不減少內存使用情況。這對我來說不是很清楚。問題是,這個類是一個更大的項目的一部分,如果你使用應用程序的內存使用量是巨大的,應用程序崩潰。 – 2011-05-05 10:00:55