Objective-C的属性和成员变量用法及关系浅析
来源:互联网 发布:索尼lt29i怎么下载软件 编辑:程序博客网 时间:2024/06/06 03:13
1、属性
关于属性的用法在苹果的官方文档《The Objective-C Programming Language》中有详细的说明,在这里就不再赘述,链接如下:
《The Objective-c Programming Language》
如果你的英文不好,没关系,已经有人把这个文档全部翻译完了,链接如下:
Objective-C编程语言官方文档翻译
2、关于@synthesize object = _object 的解释
我们在很多代码中会见到这样的写法:
@interface MyClass:NSObject{ MyObjecct *_object;}@property(nonamtic, retain) MyObjecct *object;@end@implementatin MyClass@synthesize object=_object;我在网上查阅了一些资料和其他人写的博文,总结了这样写的几条原因如下:
(1)32位系统和64位系统的差异
在32位系统中,如果类的@interface部分没有进行ivar(instance variable)声明,但有@property声明,在类的@implementation部分有响应的@synthesize,则会得到类似下面的编译错误:
Synthesize property ‘xX’ must either be named the same as a compatible ivar or must explicitly name an ivar
在64位系统中,运行时系统会自动给类添加ivar,添加的ivar以一个下划线“_”做前缀。
(2)避免莫名其妙的Bug
在这里简单说一下_object和object的区别。_object是MyClass类的成员变量,object是属性。property和synthesize定义了一对getter和setter方法,在这里的getter方法是object,setter方法是setObject,事实上getter和setter方法操作的是变量_object。
如果写synthesize objec = _object 时getter方法为:
-(MyObject *)object{ return _object;}如果写synthesize object 时getter方法为:
-(MyObject *)object{ return object;}当函数名和属性名重名的时候会出现意想不到的错误,为了避免这种Bug,Apple给的Demo Code里面多数也采用这种方式。
(3)属性和变量的用法
属性是用self.object,通过getter方法来调用的,可以在类外使用。而变量是通过_object来调用,只能在该类对应的implementation中使用,在类外不能使用。
下面看一下两种赋值操作:
self.object = [[MyObject alloc] init];_object = [[MyObject alloc] init];第一种的方式和@property(nonamtic,retain)有关,实际上是通过调用setter方法setObject来实现赋值的。第二种方式是简单的指针赋值,没有调用setter方法。
下面是retainCount的变化:
MyObject *tmp = [[MyObject alloc] init];self.object = tmp; //retainCount = 2[tmp release]; //retainCount = 1_object = [[MyObject alloc] init]; //retainCount = 1
- Objective-C的属性和成员变量用法及关系浅析
- Objective-C的属性和成员变量用法及关系浅析
- Objective-C的属性和成员变量用法及关系浅析
- Objective-C的属性和成员变量用法及关系浅析
- Objective-C的属性和成员变量用法及关系浅析
- Objective-C的属性和成员变量用法及关系浅析
- Objective-C的属性和成员变量用法及关系浅析
- Objective-C的属性和成员变量用法及关系浅析
- Objective-C的属性和成员变量用法及关系浅析
- Objective-C的属性和成员变量用法及关系浅析
- Objective-C Runtime 运行时:成员变量(ivars)及属性
- iOS 成员变量和属性的关系
- Objective-C 运行时(成员变量和属性)
- iOS --- Objective-C中类的成员变量与属性
- objective-c 成员变量与属性
- Java中成员变量和属性之间的关系
- Java中成员变量和属性之间的关系
- IOS中"声明属性"和类成员变量的关系
- 竞争对手短期内不足以威胁Android地位
- 360称打击四种手机恶意广告绝不手软
- 黑客秘密:12种类型黑客 你见过哪种
- Oracle学习之——常用SQL
- 黑帽大会:Win8是最安全桌面和移动系统
- Objective-C的属性和成员变量用法及关系浅析
- SE14激活并调整数据库时报数据库对象不一致错误
- lightroom使用小结二 构图调整
- poj2096 Collecting Bugs----期望复习
- Java基础学习5_多线程(线程间通信--等待唤醒机制)
- 有关U盘挂载的一些想法
- 《JavaWeb---利用JQuery实现页面无刷新动态改变页面数据》
- mac下批量修改图片
- 浅谈《战地3》光照反射/曲面细分地形/SRAA反锯齿