[請益] self.member跟member的差別?

看板MacDev作者 (Wayne)時間14年前 (2011/09/20 11:49), 編輯推噓3(3012)
留言15則, 4人參與, 最新討論串1/2 (看更多)
各位先進好 小弟最近發現XCode 4在程式專案有幾個可能會有memory leak的warning。(以前XCode 3 好像沒有) 仔細去追究之後發覺,幾個小弟程式上引發memory leak warning的原因。 1. 在ViewDidUnload函式裏,如果要將property釋放就必需要在裏面加 self.member = nil; 這個時候,如果self.member = nil寫成member = nil好像會有問題。 2. 在dealloc函式裏,因為property的retain,所以要加[member release]; 這個時候,如果用[self.member release];也會有問題。 小弟有點搞混,self.member指的是透過Getter或Setter來存取?member是直接存取? self.member跟member在使用上,差別到底在哪? 可能是之前XCode 3沒有出warning,而且程式也正常work沒發生leak才沒去了解。 但這次,真希望可以搞清楚。希望大大們指導一下。感謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.96.32.184

09/20 12:18, , 1F
通常 Setter 裡會先 release 掉舊值再 retain 新值,
09/20 12:18, 1F

09/20 12:19, , 2F
所以用 setter 的方式,通常不會有 leak,直接 assign
09/20 12:19, 2F

09/20 12:20, , 3F
的話,要自己處理 release 或放到 autorelease pool。
09/20 12:20, 3F

09/20 14:29, , 4F
self.member是用property. 而member是直接存取..
09/20 14:29, 4F

09/20 14:30, , 5F
而property的memory管理是靠(retain,assign,copy)來決定
09/20 14:30, 5F

09/20 17:59, , 6F
感謝上面二位大大,那看來我的理解是沒錯的。所以,在使用
09/20 17:59, 6F

09/20 17:59, , 7F
基本上最好用self.member用property方式,依(retain,..)
09/20 17:59, 7F

09/20 18:00, , 8F
比較方便。那動作原理是不是當ViewDidUnload發生時,先透過
09/20 18:00, 8F

09/20 18:01, , 9F
Setter送nil進去,讓setter retain nil,並release舊的。
09/20 18:01, 9F

09/20 18:01, , 10F
然後,dealloc時,再去直接針對member release。就算那時候
09/20 18:01, 10F

09/20 18:02, , 11F
member是nil,送release也沒關係。我這樣理解對嗎?
09/20 18:02, 11F

09/20 18:05, , 12F
但是為什麼不直接dealloc release member就好,還要事先去
09/20 18:05, 12F

09/20 18:05, , 13F
對setter送nil呢?@@"
09/20 18:05, 13F

09/21 16:05, , 14F
objC內建null object pattern,release之後順手設成nil。
09/21 16:05, 14F

09/21 16:06, , 15F
之後nil不管做什麼事,都不會有動作。
09/21 16:06, 15F
文章代碼(AID): #1EU0r8fB (MacDev)
文章代碼(AID): #1EU0r8fB (MacDev)