Object-C @property 小结
来源:互联网 发布:小程序分销商城源码 编辑:程序博客网 时间:2024/04/30 00:29
**********************************************************
感觉写的还是不太明白
转自:http://blog.csdn.net/dfqin/article/details/11669993
作者:dfqin
*********************************************************
OC像iphone手机一样与众不同,虽然有很多优秀的地方,对于刚接触的人还是有很多不适应。自己做iphone开发不久,之前对@property使用有很多不解,现在把自己理解的做下小结:
一、@property 是什么?
简单点说,属性就是一种支持访问对象成员变更的快捷的方法,可以自动的生成setter和getter方法(setter只支持传一个参数)。
面向对象思想的基本特点为封装、继承、多态。封装性主要体现在无法直接访问对象成员变量,如果需要的话,通过setter和getter方法访问成员变量。这样的话,通常要为每一个支持外边访问的成员变量写两个方法,这种操作比较繁琐且无意义。通过@property可以简化这种方法。
声明:属性要在头文件中声明,声明格式为: @property (attributes) type propertyName;
实现(合成):实现要在.m文件中,格式为 @synthesize name = _name; 而在xcode4.4以后的版本,系统会自动合成, 等价于自己写了代码“ @synthesize name = _name;” 。 也就是说如果没有特殊需求,只需要在头文件中声明而无需实现,就可以直接使用了。
成员变量访问权限:头文件中声明的成员变量,默认是protected,.m文件中声明的成员变量,默认是private的。合成属性时,@synthesize propertyName = _name;如果变量_name没有声明,系统会自动生成该成员变量且为private权限。如果_name已声明,它们会自动合成。
ClassA.h
- @interface ClassA : NSObject {
- int _int4; //默认为protected
- @public //可以通过这种方式指定成员变量的访问权限
- int _int1;
- int _int5;
- @protected
- int _int2;
- @private
- int _int3;
- }
- @property int int1;
- @property int int5;
- @property int myPro;
- @end
ClassA.m
- @implementation ClassA{
- int _intPrivate;//此处声明的变量为private的
- }
- @synthesize int1=_myInt8;//_myIn8没有声明,会自动成生,在此类中可以访问
- //成员变量 _int5 会被自动合成到属性,可以在外部通过“obj -> _int5"的方式直接访问。
- //系统会自动生成_myPro,只在本类中可以访问
- @end
二、使用
声明一个属性,如果没有声明为只读的,它默认会生成两个方法 - (type)name 和 - (void)setName; 为了可读性等其它原因,也可以改变属性的setter和getter访问名称,
@property (setter=setMyValue, getter=getBool) NSInteger value;
这样的话就可以通过 [obj setMyValue:10] 和 [obj getBool]方法业访问成员变量了,此时setValue方法会被覆盖,不再存在。
三、@property的修饰属性(attributes )
可读性:readwrite / readonly ,不写的话默认为readwrite,即会合成setter和getter方法。
原子性:nonatomic / 【默认】,系统默认setter和getter为原子操作(没有atomic关键字),如果想设置为非原子操作,可以nonatomic。
内存 assign / retain / weak / strong ,在非ARC环境下, assign为默认,引用计数不变;retain引用计数加1;在引用计数环境下,默认为strong,与retain作用相同;从5.0系统后引入了weak,作用与assign相似,不过当所指向对象引用为0时,自动置为nil。
- Object-C @property 小结
- Object-C @property 小结
- Object-C @property 小结
- Object-C @property 小结
- Object-C @property 小结
- object-c property关键字
- Object-C中的@property
- Object-c:@property 参数说明 (property parameter)
- object-c @property 的使用
- Object-C中的特性-----property
- Object-c @property的使用方法
- object-c @property 的使用
- object-c @property 的使用
- Object-c @property的使用方法
- Object-C Property and Synthesize
- Object-c------@property的参数
- Object-C:@property和@synthesize
- object-c小结
- 盘点VS2015 预览版的5个新特性
- 【设计模式】面对象王朝六元老
- hdu 5071 模拟
- linux普通真实用户与root用户之间转换
- Leetcode_119_Pascal's Triangle II
- Object-C @property 小结
- 33号码归属地的完善
- 配置maven出现JAVA_HOME is set to an invalid directory.
- fft初学
- Android学习之 UI--Metro风格
- 公共最大字串长度
- 控制actionBar中item的图标和状态
- Android TouchEvent事件传递机制
- 黑马程序员------------java多线程