property参数
来源:互联网 发布:上海欧特克软件 编辑:程序博客网 时间:2024/05/05 04:33
修饰属性(使用@property定义时) | property参数 | 读写控制|取名控制 | 引用方式 | 线程安全 || 修饰变量
修饰属性(使用@property定义时)
@property 是用来生成getter和setter方法的声明和实现的
他有四种类型的参数,可以增加其功能
- 读写控制 是否要生成set方法的参数
- readwrite 同时生成set和get方法的声明和实现 (系统默认的)
- readonly 只生成get方法的声明和实现
- 取名控制 getter和setter方法名称的参数
- setter 决定了set方法的名称 名称后面一定要有冒号
// 返回BOOL类型的方法名一般以is开头
@property (getter = isRich, setter= setIsRich:)BOOL rich; - getter 绝对了get方法的名称 一般用于BOOL类型的
- setter 决定了set方法的名称 名称后面一定要有冒号
- 引用方式 set方法内存管理相关的参数 定义属性时
- retain 持有
- 持有,对原对象引用计数加1,强引用。ARC中使用strong。
- 希望获得源对象的所有权时,针对其他NSObject对象及其子类。
- 在set方法内 release一次旧值,retain一次新值 适用于OC对象
- 在ARC中,retain被禁用, 分为 strong 强指针和 weak 弱指针
- strong 强指针 相当于retain,适用于OC对象
- weak 弱指针,相当于assign ,适用于OC对象 一般用于解决循环引用的问题
- 持有,对原对象引用计数加1,强引用。ARC中使用strong。
- assign 赋值
- 赋值,不涉及引用计数的变化,弱引用。ARC中对象不能使用assign,但原始类型(BOOL、int、float)仍然可以使用。
- 直接赋值,不对set方法做内存管理 适用于基础数据类型(NSInteger、CGFloat)和 C数据类型(int、float、double、char等等)。
- 在循环引用问题上,可以用assign 所用于OC对象
- 赋值,不涉及引用计数的变化,弱引用。ARC中对象不能使用assign,但原始类型(BOOL、int、float)仍然可以使用。
- copy 拷贝
- 拷贝,复制一个对象并创建strong关联,引用计数为1 ,原来对象计数不变。
- 希望获得源对象的副本而不改变源对象内容时, a和b各自有自己的内存,针对 NSString、Block等类型。
- release一次旧值,copy一次新值
- 拷贝,复制一个对象并创建strong关联,引用计数为1 ,原来对象计数不变。
- weak:赋值(ARC),比assign多了一个功能,对象释放后把指针置为nil,避免了野指针。
- strong:持有(ARC),等同于retain。
- retain 持有
- 线程安全 多线程管理的参数
- nonatomic 不加锁,性能高,一般用这个 set 方法的实现不加锁
- atomic 加锁,性能低 (默认)
OC对象的默认属性,就是setter/getter生成的方法是一个原子操作。如果有多个线程同时调用setter的话,不会出现某一个线程执行setter全部语句之前,另一个线程开始执行setter的情况,相关于方法头尾加了锁一样。
另外:atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。在多线程环境下,原子操作是必要的,否则有可能引起错误的结果。
1. atomic提供多线程安全。是防止在写未完成的时候被另外一个线程读取,造成数据错误
2. non-atomic:在自己管理内存的环境中,解析的访问器保留并自动释放返回的值,如果指定了 nonatomic ,那么访问器只是简单地返回这个值。
修饰变量(修饰不使用@property定义时,比如函数内的局部变量)
__strong:是缺省的关键词,强引用。
__weak:声明了一个可以自动置nil的弱引用(ARC中)。
__unsafe_unretained:声明一个弱引用,但是不会自动nil化(只有iOS 4 才应该使用)。
__autoreleasing:用来修饰一个函数的参数,这个参数会在函数返回的时候被自动释放(类似autorelease)。
默认的引用计数:
alloc:分配对象,分配后引用计数为1。
autorelease:对象引用计数减1,但如果为0不马上释放,等待最近一个pool时释放。
- property参数
- @property 参数
- @property参数
- @property参数
- @property参数
- @property参数
- @property各参数
- Objective C @property 参数
- @property 参数详解
- @property的属性参数
- @property属性参数
- OC中property参数
- IOS@property参数详解
- 10.@property参数说明
- @property 参数大全
- 内存管理:@property参数
- Objective-C - @property参数
- ios开发-property参数
- 详解 JavaScript 中的 this
- 温柔老爸如何提振小学一年级孩子的成绩
- Fiddler (三) Composer创建和发送HTTP Request
- Android圆角ListView并完美解决和ScrollView共存问题
- GWT 入门介绍
- property参数
- 用Filter实现自动登陆
- Wireshark基本介绍和学习TCP三次握手
- Android实现了豆瓣FM的首页效果
- Tomcat启动报错:严重: Null component Catalina:type=JspMonitor,name=jsp,WebModule=//localhost/hnyxgl,J2EEApp
- Wireshark图解教程(简介、抓包、过滤器)
- Android小项目之---ListView实现论坛管理效果
- 直接拿来用!最火的Android开源项目(二)
- strtok