OC属性总结笔记

如果方法只在.m中实现,没有在.h中声明,这个方法是私有方法,只能在当前类中使用

属性Objective-c的一个特性,通过@property指令来声明属性,会自动生成访问器,不需要手动再添加访问器方法
@property 属性
对实例变量的封装,系统自动添加访问器方法
@sythesize 合成,可用属性名字直接表示实例变量,不需要再加_ 合成的时候
声明属性的方法:@property (参数)数据类型 名字
参数分为4大类:
读写属性:readonly、readwrite
原子性 atomic、非原子性nonatomic
内存管理 assign copy retain unsafe_unretained strong weak
指定方法名:setter=method getter=method
<一>与读写有关
readwrite:可读可写,会自动生成getter和setter方法(默认缺省情况)
readonly:只读,只生成getter方法,不会生成setter方法
<二>
atomic:原子性的,当多个线程同时访问,对同一个属性进行赋值,原子性只允许有一个线程对它访问,也就是线程同步,保证了线程的安全,但是同时需要加锁,并等待,会加大系统开销,降低性能,所以一般不用
nonatomic:非原子性,不能保证线程同步,但是可以提高性能,因为设备内存比较宝贵,一般也不会出现多线程访问数据的问题,所以就牺牲线程的安全,不考虑同步的问题,所以一般选择非原子的(无缺省状态,需要手动添加)非原子性访问,不加同步,多线程并发访问会提高性能。注意,如果不加此属性,则默认是两个访问方法都为原子型事务访问。
<与内存有关的>
assign: 基本数据类型 简单赋值,不更改索引计数 ,是赋值的特征,弱引用,修饰基本数据类型,不涉及内存管理,也就不涉及引用计数。(缺省默认情况)setter方法是将传入的参数赋值给实例变量。
copy:拷贝,setter方法将传入的对象赋值一份,用于NSString () 建立一个索引计数为1的对象,然后释放旧对象
retain:持有,setter方法 释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1 (是说明该属性在赋值的时候,先release之前的值,然后再赋新值给属性,引用再加1。)

strong:强引用,它的存亡直接决定了它所指向的对象的存亡,只要有强指针指向某个对象,某个对象就会一直存在,在arc中使用。oc对象
weak:弱引用,它的存亡依附于它所指向的对象,只要它所指向的对象没有强指针,那么该对象就会被释放,同时,指向该对象的所有的弱指针都会被清除。拖拽的控件。
Copy其实是建立了一个相同的对象,而retain不是:

 比如一个NSString对象,地址为0×1111,内容为@”STR”

 Copy到另外一个NSString之 后,地址为0×2222,内容相同,新的对象retain为1, 旧有对象没有变化

 retain到另外一个NSString之 后,地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1

 也就是说,retain是指针拷贝,copy是内容拷贝。在拷贝之前,都会释放旧的对象。

* 使用assign: 对基础数据类型 (NSInteger)和C数据类型(int, float, double, char,等) 
 * 使用copy: 对NSString 
 * 使用retain: 对其他NSObject和其子类


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值