2011-05-21 69 views
2

我一直在困惑這幾天。我仍然試圖圍繞Objective-C中的內存管理進行討論。在Xcode中沒有檢測到內存泄漏的儀器

這裏是我的代碼段(凝聚爲清晰起見):

- (void)performOperation:(NSString *)operation 
{ 
    if ([@"+" isEqual:operation]) 
    { 
     waitingOperation = operation; 
    } 
    else if ([@"C" isEqual:operation]) 
    { 
     waitingOperation = nil; 
    } 

} 

waitingOperation僅僅是本土民營的NSString(沒有@property,沒有@synthesize,沒有getter/setter方法)。

當我將waitingOperation指向nil時,它應該不是內存泄漏,當它指向堆上的NSString時?我對這個方法的調用是在一個從UILabel display.text傳入NSString的ios應用程序中。我一直在用儀器分析這個代碼,我從來沒有看到任何泄漏。我真的很感激這方面的一些澄清。提前致謝。

回答

1

您尚未通過致電retainwaitingOperation提出所有權索賠,因此您對release不承擔任何責任。

如果字符串是在其他地方發佈的(例如通過處置UILabel),這可能會在某些時候出現問題,在這種情況下,您將留下一個懸掛指針。但是你在這裏沒有泄漏任何東西。

+0

非常感謝。我認爲這是有道理的。我實際上誤報了UILabel。這真的是UIButton。我發現在應用程序的整個生命週期內,堆上的每個按鈕都存在一個對象。沒有泄漏,我的臨時指針指向這些按鈕對象是安全的應用程序的持續時間。我希望我能正確理解這一點。 – darkhorse 2011-05-21 14:10:21

+0

此外,這種形式建議或應該保留,然後釋放這個UIButton對象內的iOS應用程序? – darkhorse 2011-05-21 14:18:39

+0

@Tom如果按鈕位於NIB文件中,則無需單獨進行管理。但是,如果您以某種方式存儲和使用對像按鈕這樣的對象的引用,這種方式可能會超出其容器的範圍,那麼您需要明確管理該外部所有權。 – walkytalky 2011-05-21 15:15:32