@property 中的关键字
2016-01-29 16:20
447 查看
一、@property(nonatomic,copy) NSString *myName;
其中nonatomic、copy都是关键字,关键字分为三类:1. 原子性
1.1 atomic(默认):线程安全。1.2 nonatiomic:可被多线程访问,不安全。在单线程或明确只有一个线程时使用。
2. 访问器控制
2.1 readwrite(默认):同时拥有setter和getter方法。
2.2 readonly:只有getter方法。
3. 内存管理
3.1 assign(默认):用于值类型,单纯值复制,如int,float,double和CGFloat等。delegate等不存在所有权关系的对象。3.2 retain:意味着实例变量获取传入参数的所有权。表现在调用setter方法时,会先释放release、然后将参数retain之后传给它。
3.3 strong:类似retain,强引用
3.4 weak:weak跟assign效果类似,但weak在对象回收之后自动设置nil。低版本使用unsafe_unretained代替。
3.5 copy:拷贝一个副本。
二、初始化readonly属性
既然readonly只生成getter方法,那么怎么初始化赋值呢。如:@property(nonatomic,readonly)NSString *myName;
@synthesize myName;//需写在@implementation之后。
myName = @”*******”;
或不写@synthesize,直接使用_myName。
通过_myName进行存取的话是不会调用该变量的setter或者getter方法的,声明的readonly也就不会起作用,而通过self. myName调用的话是会调用setter(无效)或者getter方法的,这样readonly也就会起作用。
其实在申明@property时,系统会创建@synthesizemyName = _myName
相关文章推荐
- C#中Property和Attribute的区别实例详解
- JavaScript中检查对象property的存在性方法介绍
- JavaScript中对象property的删除方法介绍
- JavaScript中遍历对象的property的3种方法介绍
- javascript 对象属性property与元素属性attribute的浏览器支持
- JavaScript Table排序 2.0 (更新)
- JavaScript对象的property属性详解
- JavaScript中property和attribute的区别详细介绍
- JavaScript中的property和attribute介绍
- javascript中attribute和property的区别详解
- JavaScript中对象property的读取和写入方法介绍
- Python Property属性的2种用法
- Python中用Descriptor实现类级属性(Property)详解
- python的描述符(descriptor)、装饰器(property)造成的一个无限递归问题分享
- Maven学习笔记
- Xtreme Property Grid
- System.getProperty(String key)和MIDlet.getAppProperty(String key)
- IOS控件讲解
- spring @Value值读不到,接入disconf后仍然读不到
- ios property探秘