看板 MacDev 關於我們 聯絡資訊
※ 引述《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
itsZero:其實新的 Static Analyzer 也是依靠這個規則在運作的 xD 09/04 20:31
aecho:我書慣把method的開頭分成copy和get,用來區分記憶體到時候 09/05 19:12
aecho: 習 09/05 19:12
aecho:,呼叫該method的要不要釋放掉。 09/05 19:13
uranusjr:在 objective-C 裡面通常這裡不會用「get」喔 09/05 19:15
aecho:程式一直長大@@要找leak都是看著有copy的,是否跟著release 09/05 19:16
aecho:呵呵,我是從MFC跳過來的 Orz 09/05 19:17