Re: [問題] 關於使用autorelease或直接使用release …
※ 引述《angelyin (等待.微笑)》之銘言:
: 各位好:
: 之前問過關於記憶體管理的問題
: 雖然弄懂reference counting要怎麼做了
: 可是卻產生了一些疑問
: 當我們在使用autorelease時要先建立 autorelease pool
: count值是在pool release時才會真正釋放
: 請問什麼時機使用autorelease會比直接release好啊?
有時候是「不得不用」
例如你今天可能有個 getter method 需要回傳一個字串 string
這個 string 是由一個已存在的 string1 組合成
- (NSString *)string
{
NSString *string = [[NSString alloc] initWithFormat:@"string1 = %@",
string1];
return string;
}
這樣會有 memory leak, 因為你沒有把 string 這個物件 release
可是如果你寫
- (NSString *)string
{
NSString *string = [[NSString alloc] initWithFormat:@"string1 = %@",
string1];
[string release];
return string;
}
就完蛋了, 因為 string 已經被 dealloc, 沒有東西可以 return
這時候就只能用
- (NSString *)string
{
NSString *string = [[NSString alloc] initWithFormat:@"string1 = %@",
string1];
[string autorelease];
return string;
}
告訴 pool「等一下我要釋放 string」, 好先回傳這個值
等到你呼叫 [pool drain]; 的時候, pool 會自動呼叫 [string release];
: reference counting裡有dealloc這個用法
: 它可直接把count值歸零並釋放
: 如果我都有乖乖的release
: 那到最後count值也會等於零啊
: 那dealloc又在什麼時候會用到呢?
你應該不會在程式裡手動呼叫 dealloc
這個東西會在程式的 reference count 歸零時自動被啟動
而且我沒看過有人在 dealloc 裡面手動把 reference count 歸零耶
因為根本沒用吧XD
: 謝謝各位^^
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.72.123
→
07/18 16:45, , 1F
07/18 16:45, 1F
推
07/18 21:58, , 2F
07/18 21:58, 2F
推
07/19 12:25, , 3F
07/19 12:25, 3F
推
07/22 01:23, , 4F
07/22 01:23, 4F
→
07/22 01:25, , 5F
07/22 01:25, 5F
→
07/22 01:28, , 6F
07/22 01:28, 6F
推
07/22 02:30, , 7F
07/22 02:30, 7F
→
07/22 02:31, , 8F
07/22 02:31, 8F
→
07/22 02:31, , 9F
07/22 02:31, 9F
推
10/06 17:55, , 10F
10/06 17:55, 10F
→
10/06 17:56, , 11F
10/06 17:56, 11F
→
10/06 17:57, , 12F
10/06 17:57, 12F
→
10/06 17:58, , 13F
10/06 17:58, 13F
→
10/06 17:59, , 14F
10/06 17:59, 14F
→
10/06 17:59, , 15F
10/06 17:59, 15F
討論串 (同標題文章)
MacDev 近期熱門文章
PTT數位生活區 即時熱門文章