IPhone开发学习笔记:属性变量如何release?
2011-01-27 11:28
513 查看
为了释放对象拥有的实例变量,常用的方法是在dealloc中调用release,比如下面的代码:
如果这里的name是属性变量呢?在IPhone开发基础教程这本书里,你会经常在看到这样的代码:
这里并没有直接访问变量本身,而是使用了编译器自动生成的setter。那问题就来了,咋的一赋值成nil,就能release了?想想看一般的setter的是怎么写的,看下面:
ok,很方便的写法。但是不是说就没有问题呢?请参考下面的讨论,在KVC机制中是会有问题的。
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
@interface MyClass : NSObject { NSString *name; } @end @implementation MyClass //something... - (void)dealloc { [name release]; [super dealloc]; } @end
如果这里的name是属性变量呢?在IPhone开发基础教程这本书里,你会经常在看到这样的代码:
@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机制中是会有问题的。
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
相关文章推荐
- [iphone 开发学习笔记]Object-C和C语言最大的区别也是最大的扩展-----消息(即如何调用一个对象中的函数)
- iPhone/iPad高级应用与手游开发学习笔记:多点触摸与手势检测(一:UITapGestureRecognizer)
- iPhone开发学习笔记 - 目录
- iPhone开发学习笔记016——用U…
- 我的iphone开发学习笔记(三)使用UISlide, UIImageView及动画
- 『iOS学习笔记』 - 变量 属性 方法 实现
- [iphone开发]Objective-C学习笔记: Objective-C 语言特性
- iphone 开发学习笔记七
- [Iphone开发]如何在GDB中查看变量的值
- C#开发学习笔记:GridView中如何设置满足条件的行不可编辑(XtraGrid)
- C语言学习笔记4——变量属性
- iphone开发学习笔记-- 应用程序的沙盒(11)
- Android开发学习笔记:Intent的简介以及属性的详解
- Java学习笔记十四:如何定义Java中的类以及使用对象的属性
- C语言学习笔记(6)-如何从变量声明的表面上来区分指针数组和数组指针
- 我的iphone开发学习笔记(二)使用UITextView, UITextField 和UIButton控件
- iPhone/iPad高级应用与手游开发学习笔记:多点触摸与手势检测(三:UIPinchGestureRecognizer和UIRotationGestureRecognizer)
- iPhone应用程序开发指南 学习笔记
- Object C学习笔记6-如何在Windows环境搭建Object C开发环境
- android 开发零起步学习笔记(十九):android使用全局变量的两种方法