Objective-C的属性(property)解析:
来源:互联网 发布:精点数据公司怎么样 编辑:程序博客网 时间:2024/06/10 08:29
Property
“属性”(property)是Objective-C的一项特性,用于封装对象中的数据。使用了属性的话,编译器就会自动编写访问这些属性所需的方法(setter和getter),这个过程称为“自动合成”(autosynthesis)。
@property等同于在.h文件中声明实例变量的get/set方法,@synthesize等同于在.m文件中实现实例变量的get/set方法
Attribute
属性可以拥有的attribute分为四类:
1. 原子性
- atomic:默认由编译器所合成的方法会通过锁定机制确保其原子性。
- nonatomic:使用nonatomic语义的话,两个线程读写同一属性,那么当其中一个线程正在改写某属性值时,另外一个线程也许会突然闯入,把尚未修改好的属性值读取出来。发生这种情况时,线程读到的属性值可能不对。
但是在实际开发iOS程序中,所有属性都声明为nonatomic,因为在iOS使用同步锁的开销较大,会产生性能问题。一般情况下并不要求属性必须是“原子的”,因为这并不能保证“线程安全”(thread safety),若要实现“线程安全”的操作,还需要采用更为深层的锁定机制才行。因此,开发iOS程序一般都会使用nonatomic属性。
2. 读写/权限
- readwrite:读写,具备readwrite的属性同时拥有setter和getter方法,若该属性由@synthesize实现,则编译器会自动生成这两个方法。
- readonly:只读,仅拥有getter方法。可以用这个attribute把某个属性对外公布为只读属性,然后在”class-continuation分类”中将其重新定义为读写属性。
3. 内存管理语义
- assign:会生成直接赋值给实例对象的setter方法,通常用来修饰诸如NSInteger、CGFloat等原始类型(primitive type),或者是在类中不想真正持有的对象,类似delegate等。
- strong: 表明该属性定义了一种“拥有关系”。为strong属性设置新值时,setter会先保留新值,并释放旧值,然后在将新值设置上去。
- weak:表明属性定义了一种“非拥有关系”,为weak属性设置新值时,setter既不保留新值,也不释放旧值。然而在属性所指的对象遭到摧毁时,属性值也会清空。
- copy:setter并不保留新值,而是将其“拷贝”。当属性为NSString* 时,通常用这个attribute来保护其封装性,因为传递给setter 的新值有可能指向一个NSMutableString类的实例,此时若是不拷贝字符串,那么在设置完属性之后,字符串的值就可能会在对象不知情的情况下遭人更改。通常的,只要实现属性所用的对象是可变的(mutable),就应该在设置新属性值时拷贝一份。
- retain:setter方法会增加对象的保留数(retain count),用在属性是指向某个对象的指针时。
4. 方法名
- getter = < name>:指定getter的方法名。比如说,在UISwitch类中,表示开关是否打开的属性就是这样定义的:
@property (nonatomic, getter=isOn) BOOL on;
- setter = < name>:指定setter的方法名,这种用法不太常见。
1 0
- Objective-C的属性(property)解析:
- objective-c中property的属性
- 【Objective-C】@property的所有属性详解
- iOS Objective-C @property属性的用法
- Objective-c的@property,属性介绍
- IOS-1-Objective-C-@property属性的使用及注意问题:@property(assign)int name;
- Objective C 2.0 属性(Property)
- objective C property属性详解
- Objective C 2.0 属性(Property)
- Objective-C 11 属性property
- 1、Objective-C的@property属性和@synthesize属性
- 1、Objective-C的@property属性和@synthesize属性
- Objective-C 2.0属性(Property) retain和copy的区别
- Objective-C中@property的所有属性详解
- Objective-C中@property的所有属性详解
- Objective-C中@property的所有属性详解
- objective-c中property 的属性strong,weak, retain, copy
- 【Objective-C】类的属性、@property参数、前向声明
- 第七周上机实践项目——项目3-用多文件组织多个类的程序
- 第七周项目1--求两点间的距离
- 【数据结构】Orthogonal-List 十字链表(更新时间:2016-04-15)
- 第四周项目五(3)-用递归方法求解
- 第五周项目一三角形类雏形
- Objective-C的属性(property)解析:
- 双目视觉测距,目标点三维信息求其深度值
- algrothm_素数(101-200)
- 成员函数友员函数与一般函数有区别(1)
- 解决X210开发板的软开关按键问题
- 第三周项目:换分币
- window.onload用法
- 扩展TextView之深入浅出实战篇
- ios 一个正则表达式测试(只可输入中文、字母和数字)