关于OC的property 和 实例变量思考
来源:互联网 发布:mac电脑铃声剪辑软件 编辑:程序博客网 时间:2024/06/12 22:06
区别一
property的是可以被外部访问的,当然也可以定义私有的property,
但是实例变量,外部是不可访问的。所以当我们的变量需要给外部访问的时候,可以定义property。
区别二
我们需要保存我们的数据,不要被提前dealloc的时候,可以使用property的setter,来retain多一次,等到使用完了再release,更好控制,使用实例变量的话,就只是一个指针,不会调用setter方法,容易被改变。
区别三
如果在操作中,我们仅仅是需要用到一个变量的地址,那么用实例变量就好,用self.property的话,虽然只是调用getter来的到指针,但是也绕多了一步,去调用getter才拿到指针。
补充
1》@property并不只是可以生成getter和setter方法,它还可以做内存管理。不过这里我暂不讨论、、也就是说
2》atomic是默认行为,assign是默认行为,readwrite是默认行为。
3》推荐做法是NSString用copy,delegate用assign(且一定要用assign,不要问为什么,只管去用就是了,以后你会明白的),非objc数据类型,比如int,float等基本数据类型用assign(默认就是assign),而其它objc类型,比如NSArray,NSDate用retain。
4》dealloc函数里面有这样的代码:self.xxx = nil;看到这里,现在你们明白这样写有什么用了吧?它等价于[xxx release]; xxx = [nil retain];(---如果你的property(nonatomic,retian)xxx,那么就会这样,如果不是,就对号入座吧)
因为nil可以给它发送任何消息,而不会出错。为什么release掉了还要赋值为nil呢?大家用c的时候,都有这样的编码习惯吧。
int* arr = new int[10]; 然后不用的时候,delete arr; arr = NULL; 在objc里面可以用一句话self.arr = nil;搞定
使用Analyze可以分析哪里有潜在内存泄露,可以根据需要进行修改。
原文
http://blog.csdn.net/jkay_wong/article/details/8996558
- 关于OC的property 和 实例变量思考
- 【OC学习-9】利用@property属性和@synthesize简化实例变量的存取器方法
- OC 实例变量(instance var)与属性(@property)的关系
- iOS开发-OC中属性创建需要注意的地方(property实例变量的创建和标准存取方法)
- iOS开发-OC中属性创建需要注意的地方(property实例变量的创建和标准存取方法)
- OC中用@interface和 @property 方式声明变量的区别
- 关于objective-c中的property和实例变量
- 关于@property自动生成的实例变量的相关问题
- OC--语法变量声明synthesize和property
- oc property 关于copy 和 赋值'"="的真相
- OC基础:实例变量和成员变量的区别
- OC中属性(property)与实例变量(instance variable)之间的区别
- Property和实例变量(Ivar)的最佳实践
- oc中关于property和synthesize
- OC 实例变量的可见度
- OC -- @interface和@property两种声明变量方式的区别
- OC -- @interface和@property两种声明变量方式的区别
- OC基础---NSString、多文件开发、点语法、成员变量的作用域、@property和@synthesize
- umdh工具使用
- c#中的函数
- 软件实施--xxxx医院实施总结
- 控制反转思想的理解实例
- hdu 4741 Save Labman No.004
- 关于OC的property 和 实例变量思考
- XBMC插件编写规范
- [Qt] Qt程序发布 [2013-09-16更新]
- Android Expansion 总结
- 树链剖分 模板
- 虚拟网卡及网卡聚合
- android ril 调试分析
- UDT::recv 函数
- hadoop 源代码阅读(一 环境准备)