作者Gsus (肉元,吉米,助教)
看板MacDev
標題[問題] 關於init一個物件的寫法
時間Thu Dec 31 02:42:55 2009
新手又來問問題了XD
以下面這個常見的寫法來說
- (void)viewDidLoad {
UIBarButtonItem *addButton = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemAdd
style:UIBarButtonItemStyleBordered target:self
action:@"selector(add:)"];
self.navigationItem.rightBarButtonItem = addButton;
[addButton release];
}
常常看到一些code的寫法是先用一個變數(addButton)建立好物件後
讓另一個變數(self.navigationItem.rightBarButtonItem)retain
再release前面宣告的變數(addButton)
為什麼不一開始就用
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] init....]呢
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.168.34.115
1F:推 Blueshiva:這樣你後面要怎麼release? 12/31 04:06
2F:推 seruziu:iPhone能不能加上 [[[xx alloc] init] autorelease] ?? 12/31 07:52
3F:推 Blueshiva:可以啊,只是這樣子會變得很長就是了 12/31 11:27
4F:→ Gsus:兩種寫法的最後不都是由self.navigati...tem所retain嗎 12/31 12:10
5F:→ Gsus:還是我有觀念錯誤的地方@@ 12/31 12:10
6F:推 Blueshiva:alloc的retain count會+1,setter設定過再+1,self 12/31 12:14
7F:→ Blueshiva:dealloc時-1,然後就leak了 12/31 12:15
8F:推 leondemon:對我來說 能release就儘量不要autorelease 01/01 14:07
9F:→ leondemon:而且許多物件有支援產生autoreleased object 01/01 14:08
10F:→ leondemon:不用init後馬上又autorelease這麼長的敘述 01/01 14:09
11F:推 Blueshiva:不過UIBarButtonItem沒支援 :p 01/01 23:34
12F:推 leondemon:其實Apple應該要設法把這三行變成一行... XD 01/02 11:51
13F:→ Gsus:shit...我忘記這是dot syntax了 01/03 02:02