[問題] return autorelease物件何時會被release

看板MacDev作者 (肉元,吉米,助教)時間14年前 (2010/10/16 12:44), 編輯推噓0(007)
留言7則, 3人參與, 最新討論串1/1
為了之前的問題,我跑去看了 Memory Management Programming Guide 看完以後我對autorelease還是有些疑問 據我看的結論是,autorelease message是把物件放進autorelease pool裡 然後在run-loop結束時會drain pool,release pool中的所有物件 如果以這種邏輯來看 一個getter method - (NSString *)myTitle { NSString *aString = [[NSString alloc] initWithString:@"aString"]; return [aString autorelease]; } 應該在getter method結束時aString就應該會被myTitle的autorelease pool 給清掉了吧 但是實際上我發現getter method結束後aString不會被release 是到invoker的run-loop結束時才被release 目前卡在這,我想我的理解應該是沒錯,但是我測試的結果也不可能錯 所以就又跑上來問一下了XD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.248.9.126 ※ 編輯: Gsus 來自: 111.248.9.126 (10/16 12:45)

10/16 12:48, , 1F
myTitle 哪來的 autorelease pool 啊?
10/16 12:48, 1F

10/16 13:06, , 2F
所以是我誤解了!我以為每個function{}都有自己的autorelease
10/16 13:06, 2F

10/16 13:06, , 3F
pool
10/16 13:06, 3F

10/16 13:11, , 4F
那可以請問autorelease的scope嘛~?
10/16 13:11, 4F

10/16 15:04, , 5F
如果你沒有特別指定,就是 NSApplicaiton 或 UIApplication
10/16 15:04, 5F

10/16 15:04, , 6F
的 autorelease pool
10/16 15:04, 6F

10/16 20:41, , 7F
了解! 感謝感謝!
10/16 20:41, 7F
文章代碼(AID): #1CkIt0fL (MacDev)
文章代碼(AID): #1CkIt0fL (MacDev)