[問題] 關於init一個物件的寫法

看板MacDev作者 (肉元,吉米,助教)時間15年前 (2009/12/31 02:42), 編輯推噓7(706)
留言13則, 4人參與, 最新討論串1/1
新手又來問問題了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

12/31 04:06, , 1F
這樣你後面要怎麼release?
12/31 04:06, 1F

12/31 07:52, , 2F
iPhone能不能加上 [[[xx alloc] init] autorelease] ??
12/31 07:52, 2F

12/31 11:27, , 3F
可以啊,只是這樣子會變得很長就是了
12/31 11:27, 3F

12/31 12:10, , 4F
兩種寫法的最後不都是由self.navigati...tem所retain嗎
12/31 12:10, 4F

12/31 12:10, , 5F
還是我有觀念錯誤的地方@@
12/31 12:10, 5F

12/31 12:14, , 6F
alloc的retain count會+1,setter設定過再+1,self
12/31 12:14, 6F

12/31 12:15, , 7F
dealloc時-1,然後就leak了
12/31 12:15, 7F

01/01 14:07, , 8F
對我來說 能release就儘量不要autorelease
01/01 14:07, 8F

01/01 14:08, , 9F
而且許多物件有支援產生autoreleased object
01/01 14:08, 9F

01/01 14:09, , 10F
不用init後馬上又autorelease這麼長的敘述
01/01 14:09, 10F

01/01 23:34, , 11F
不過UIBarButtonItem沒支援 :p
01/01 23:34, 11F

01/02 11:51, , 12F
其實Apple應該要設法把這三行變成一行... XD
01/02 11:51, 12F

01/03 02:02, , 13F
shit...我忘記這是dot syntax了
01/03 02:02, 13F
文章代碼(AID): #1BEvyoiO (MacDev)
文章代碼(AID): #1BEvyoiO (MacDev)