Re: [問題] 何時需要release

看板MacDev作者 (←這人是超級笨蛋)時間16年前 (2009/09/04 20:15), 編輯推噓2(205)
留言7則, 3人參與, 最新討論串5/5 (看更多)
※ 引述《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

09/04 20:31, , 1F
其實新的 Static Analyzer 也是依靠這個規則在運作的 xD
09/04 20:31, 1F

09/05 19:12, , 2F
我書慣把method的開頭分成copy和get,用來區分記憶體到時候
09/05 19:12, 2F

09/05 19:12, , 3F
09/05 19:12, 3F

09/05 19:13, , 4F
,呼叫該method的要不要釋放掉。
09/05 19:13, 4F

09/05 19:15, , 5F
在 objective-C 裡面通常這裡不會用「get」喔
09/05 19:15, 5F

09/05 19:16, , 6F
程式一直長大@@要找leak都是看著有copy的,是否跟著release
09/05 19:16, 6F

09/05 19:17, , 7F
呵呵,我是從MFC跳過來的 Orz
09/05 19:17, 7F
文章代碼(AID): #1AeGJDVc (MacDev)
文章代碼(AID): #1AeGJDVc (MacDev)