iPhone開發(fā)之屬性變量如何Release
iPhone開發(fā)之屬性變量如何Release是本文要介紹的內(nèi)容,主要是為了釋放對象擁有的實(shí)例變量,常用的方法是在dealloc中調(diào)用release,比如下面的代碼:
- @interface MyClass : NSObject {
- NSString *name;
- }
- @end
- @implementation MyClass//something...
- - (void)dealloc{
- [name release];
- [super dealloc];
- }
- @end
如果這里的name是屬性變量呢?在IPhone開發(fā)基礎(chǔ)教程這本書里,你會經(jīng)常在看到這樣的代碼:
- @interface MyClass : NSObject {
- NSString *name;
- }
- @property(retain) NSString *name;
- @end
- @implementation MyClass @synthesize name;
- - (void)dealloc{ self.setName = nil;
- [super dealloc];
- }
- @end
這里并沒有直接訪問變量本身,而是使用了編譯器自動生成的setter。那問題就來了,咋的一賦值成nil,就能release了?想想看一般的setter的是怎么寫的,看下面:
- - (void) setName:(NSString *)
- value {
- [value retain];
- // calls [nil retain], which does nothing [name release];
- // releases the backing variable (ivar) name = value;
- // sets the backing variable (ivar) to nil}
ok,很方便的寫法。但是不是說就沒有問題呢?請參考下面的討論,在KVC機(jī)制中是會有問題的。
- http://stackoverflow.com/questions/192721/why-shouldnt-i-use-objective-c-2-0-accessors-in-init-dealloc
- http://stackoverflow.com/questions/1283419/valid-use-of-accessors-in-init-and-dealloc-methods
小結(jié):iPhone開發(fā)之屬性變量如何Release的內(nèi)容介紹完了,希望通過本文的學(xué)習(xí)能對你有所幫助!