2012-07-02 130 views
0

我想知道如果我做得正確,關於下面的數字按鈕保留和釋放。在書中「由stephen kochan編寫目標C」中,它在一個不同的例子中說,像digitbutton是持有對發件人持有的同一對象的引用,所以在發件人之間可能會發布其他地方,然後我會調用currenttitle方法在釋放數字按鈕上,如果是這樣的話。所以在這裏我叫保留digitbutton和使用後,我叫釋放它。好的例子可能不是真正的這個目的,但是這個概念是否有效?我是否應該讓練習保留下面例子中的對象?如果我錯了,你能幫我嗎?我在編寫託管代碼方面沒有經驗。內存保留和釋放

- (IBAction)clickDigit:(id)sender { 
    UIButton *digitButton = (UIButton*)sender; 
    [digitButton retain]; 
    NSLog(@"%@",[digitButton currentTitle]); 
    [[self displayOutput] setText:[digitButton currentTitle]]; 
    [digitButton release]; 
} 

Gracias。

是的例子是錯的,讓我們說如果代替id發件人有NSString而不是UIButton,相同的NSString,並且返回類型只是無效。那麼爲了安全起見,我必須保留髮件人NSString,以防持有引用的人釋放它。 注意:我沒有使用ARC

+0

會如何,而你的方法運行發送者得到釋放? – Thilo

+0

嗨,我已編輯我的查詢 –

回答

0

你在做什麼clickDigit:是不必要的。

而是我解釋爲什麼它是不必要的,我會直接指向你在那裏我學到正確的內存管理技術:Advanced Memory Management Programming Guide

+0

回覆:「不必要」:請注意,ARC顯然做同樣的事情,雖然(保留方法參數):http://stackoverflow.com/questions/10310441/why-does-arc-retain -method-arguments – Thilo

+3

事實上,最好解釋爲什麼它是不必要的。 SO答案應該大部分是獨立的,只使用鏈接作爲備份。 –

+0

@thilo如果您正在使用優化版本,則不會。另外,arc不會調用對象的釋放/保留,但會在ObjC運行時調用更多的輕量級處理程序(因此不需要IMP查找或其他動態的東西) – JustSid

3

你不需要保留&釋放它。

你可以這樣做

- (IBAction)clickDigit:(UIButton *)sender 
{ 

    NSLog(@"%@",[sender currentTitle]); 
    [[self displayOutput] setText:[sender currentTitle]]; 

}