作者uranusjr (←這人是超級笨蛋)
看板MacDev
標題Re: [問題] 何時需要release
時間Fri Sep 4 20:15:07 2009
※ 引述《leondemon (狗狗)》之銘言:
: 感謝回應
: 所以說
: NSNumber *num1 = [NSNumber numberWithInteger: 100]; 時
: numberWithInteger中會執行alloc(retain count=1)、init其值、並self autorelease
: 然後再pool drain時 這個物件才會retain count-1 然後即被dealloc
: 我這樣的理解對嗎?
應該是, 我也沒有深入去想過到底是怎樣
我是實務上視為是這樣, 沒有問題就不管了XD
下一篇講的就順便題一下
官方上每個有 init 開頭的 method 都會有一個會 autorelease 的對應
以 NSNumber 為例, 你可以 [[NSNumber alloc]
initWithInteger:i]
所以你就一定可以 [NSNumber
numberWithInteger:i]
NSString 啊 NSArray 之類的也是一樣, 名稱也很顯然
在命名時官方也是建議這樣
如果一個 method 不會把 object 放進 aurelease pool
就要在 method 名稱裡寫上 copy 或 init, 反之就絕對不要, 而且最好有規則
例如有個 class 叫 Ratatouille
那就可以寫一個 + (id)initWithVegetables:
對應就要寫成 + (id)ratatouilleWithVegetables: 這樣
--
╱ ̄ ̄ ̄╲
▏
◢█◣ ▏
︻█︻█ ▏
成龍表示: 是喔...
′/ ‵ ▏
╰╯ █╱
ψQSWEET ◥︶█◤
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.72.123
1F:推 itsZero:其實新的 Static Analyzer 也是依靠這個規則在運作的 xD 09/04 20:31
2F:→ aecho:我書慣把method的開頭分成copy和get,用來區分記憶體到時候 09/05 19:12
3F:→ aecho: 習 09/05 19:12
4F:→ aecho:,呼叫該method的要不要釋放掉。 09/05 19:13
5F:→ uranusjr:在 objective-C 裡面通常這裡不會用「get」喔 09/05 19:15
6F:推 aecho:程式一直長大@@要找leak都是看著有copy的,是否跟著release 09/05 19:16
7F:→ aecho:呵呵,我是從MFC跳過來的 Orz 09/05 19:17