作者iwayne (Wayne)
看板MacDev
标题[请益] self.member跟member的差别?
时间Tue Sep 20 11:49:25 2011
各位先进好
小弟最近发现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
1F:推 hsc0927:通常 Setter 里会先 release 掉旧值再 retain 新值, 09/20 12:18
2F:→ hsc0927:所以用 setter 的方式,通常不会有 leak,直接 assign 09/20 12:19
3F:→ hsc0927:的话,要自己处理 release 或放到 autorelease pool。 09/20 12:20
4F:推 popcorny:self.member是用property. 而member是直接存取.. 09/20 14:29
5F:→ popcorny:而property的memory管理是靠(retain,assign,copy)来决定 09/20 14:30
6F:→ iwayne:感谢上面二位大大,那看来我的理解是没错的。所以,在使用 09/20 17:59
7F:→ iwayne:基本上最好用self.member用property方式,依(retain,..) 09/20 17:59
8F:→ iwayne:比较方便。那动作原理是不是当ViewDidUnload发生时,先透过 09/20 18:00
9F:→ iwayne:Setter送nil进去,让setter retain nil,并release旧的。 09/20 18:01
10F:→ iwayne:然後,dealloc时,再去直接针对member release。就算那时候 09/20 18:01
11F:→ iwayne:member是nil,送release也没关系。我这样理解对吗? 09/20 18:02
12F:→ iwayne:但是为什麽不直接dealloc release member就好,还要事先去 09/20 18:05
13F:→ iwayne:对setter送nil呢?@@" 09/20 18:05
14F:推 aecho:objC内建null object pattern,release之後顺手设成nil。 09/21 16:05
15F:→ aecho:之後nil不管做什麽事,都不会有动作。 09/21 16:06