OC存取器的指示符详解
来源:互联网 发布:java shiro盐值加密 编辑:程序博客网 时间:2024/05/02 02:19
一、存取器指示符
1、assign:该指示符指定对属性进行简单的赋值,不更改对所赋的值的引用计数,这个指示符主要用于NSInteger等基础类型,以及short、float、double、结构体等C数据类型;
2、atomic(nonatomic):指定合成的存取方法是否为原子操作,所谓原子操作,主要指是否线程安全,如果使用atomic,那么合成的存取方法都是线程安全的——当一个线程进入存取方法的方法体之后,其他线程就无法进入该存取方法,这样可以避免多线程并发破坏对象的数据完整性,atomic是默认值,虽然atomic可以保证数据的完整性,但是atomic的线程安全会造成性能下降,因此,大多数单线程环境下,我们会优先考虑使用nonatomic来提高存取方法的访问性能。
3、copy:使用copy指示符,如果调用setter方法对成员变量赋值时,会将被赋值的对象复制一个副本,再将该副本赋值给成员变量。copy指示符会将成员变量所引用对象的引用计数减1,当成员变量的类型是可变类型,或其子类是可变类型时,被赋值的对象有可能在赋值之后被修改,如果程序不需要这种修改影响setter方法设置的成员变量值,此时就可以考虑使用copy指示符。
4、getter、setter:指示符用于为合成的getter方法和setter方法指定自定义的方法名。
5、readonly、readwrite:readonly指示系统只合成getter方法,readwrite是默认值,系统合成getter和setter方法
6、retain:使用retain指示符定义属性时,当把某个对象赋值给该属性时,该属性原来所引用的对象引用计数减1,被赋值对象的引用计数加1。在为弃用ARC机制下,retain是一个很有用的指示符,当一个对象的引用计数大于1时,该对象不应该被回收,但启用ARC机制后,一般较少使用retain。
7、strong、weak:strong指示符指定该属性对被赋值对象持有强引用,而weak指示符指定该属性对被赋值对象持有弱引用。强引用的意思是:只要该强引用指向被赋值的对象,那么该对象就不会自动回收,弱引用的意思是:即使该弱引用指向被赋值的对象,该对象也可能被回收。weak指向的地址一旦被释放,这些指针都被赋值为nil,这样能有效的防止悬空指针。
8、unsafe_unretained:这个指示符与weak指示符基本相似,对于被unsafe_unretained指针所指向的对象,该对象也可能被回收,与weak指针不同的是,当unsafe_unretained指针锁引用的对象被回收后,unsafe_unretained指针不会被赋值为nil,因此可导致程序崩溃。
二、键值编码KVC与键值监听KVO
ASPerson* per = [[ASPerson alloc] init];
[per setValue:@"XXX" forKey:@"OOO"];
其中ASPerson为自定义类,OOO为存取器设置的属性名,XXX为属性名设置的属性值。
[per valueForKey:@"OOO"],获取OOOkey的属性值。
KVC方式的搜索顺序为:1)setName方法、2)_name成员变量;3)name成员变量
使用KVC方式操作属性时,如果属性不存在getter和setter方法,也不存在对于的成员变量,KVC会自动调用setValue:forUndefinedKey:和valueForUndefined:方法——但系统默认实现这两个方法仅仅是引发异常,并没有进行任何特别的处理。并可能引发一个异常,结束程序,这个默认方法的实现允许并不合适我们的程序,所以,可以考虑重写setValue:forUndefinedKey:方法。如:
-(void) setValue:(id) value forUndefineKey:(id) key
{
NSLog(@"打印错误信息");
}
- OC存取器的指示符详解
- OC中—属性指示符
- C++的预处理器指示符
- 预处理器指示符
- #预处理器指示符
- OC——合成存取器
- OC之合成存取器总结
- #pragma 指示符的用法
- spring的切入点指示符
- C++的属性指示符
- 【OC学习-9】利用@property属性和@synthesize简化实例变量的存取器方法
- OC学习笔记(3)类的初始化与存取器方法
- 【黑马程序员】-我的OC学习笔记(3)-存取器方法和构造方法重写
- 指示符
- 关于链接指示符的问题
- 条件指示符 #ifndef 的用处
- 条件指示符 #ifdef 的用法
- 属性指示符的类型及作用
- (原创)实战渗透河北经贸大学
- 适配器模式
- Android 程序打包及签名
- 唐巧的iOS技术博客好文列表
- vs2010打开vs2013工程
- OC存取器的指示符详解
- 基于TCP的Socket通信
- IAR 工程改名
- solr删除全部索引数据
- 通用权限管理设计 之 数据库结构设计
- Unity3D教程:动画系统教程
- 谷歌关键字一枚
- 第17周 项目7 结构体电子词典
- mysql部分查询功能