Re: [quiz] NSImage's leak

看板MacDev作者 (藍永倫)時間18年前 (2006/03/09 21:00), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串6/11 (看更多)
※ 引述《yllan (藍永倫)》之銘言: : ※ 引述《anpig (安得列)》之銘言: : : 這樣看來,除了NSImage以外還有哪些物件也是如此? : : 或是說,為什麼會有這樣的設計? : 沒有辦法,obj-c 裡面記憶體得自己管理,為了維護一些 principle : 所以才有 autorelease 這種東西出來。 : (當你要回傳一個東西給別人,你要把擁有權交給別人,只能 delay release : 要不然東西可能會不見) : 別人若是使用,可以 retain 他,但若不用呢?你不能做任何事情, : 只能等回到 application runloop 才會被 autorelease pool 給清除。 : (不然就是重複 release 了) : ... 回家補完 NSImage 的生成比較複雜,內部要和什麼 NSImageRepresentation 之類的綁一起, 在初始的時候可能就會叫用別的 class ,之間產生沒有主人的 autoreleased 物件 就會積一堆了。只能說無奈。因為嚴格說起來這不算問題~下面兩種寫法你會寫哪個? img = [NSImage imageWithPath: path]; ...1 img = [[NSImage alloc] initWithPath: path]; ...2 [img release]; 當然是 1 啦,2 的話不僅寫起來長,要是忘記 release 又會造成 memory leak... 嗯,懶惰違背了記憶體管理的 priciple ,難怪。 其實解法就是多用 profiling tools, 大量記憶體調用的迴圈內手動加 release pool, 當初我沒見識,不知道蘋果已經在記憶體管理的文件上提過這點還野人獻曝, (Obj-C 的文件沒有,是另外一份專講 Memory Management 的)自以為發現一個 問題。不過這個問題真的不只困擾我而已,外國佬也發生過,應該算是個要注意的 地方啦~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.31.131
文章代碼(AID): #1442RQ9P (MacDev)
討論串 (同標題文章)
文章代碼(AID): #1442RQ9P (MacDev)