iOS开发之属性关键字

学习了下关于iOS属性关键字,最近面试经常会遇到相关问题,记录下笔记。
学习阶段,如果哪部分有问题,欢迎指正,共同探讨。@Apach3


现在最常用的写法就是:

@property (nonatomic, strong) UILable *myLabel;

定义一个UILabel,依次解读下:

@property
程序在编译阶段自动生成gettersetter方法。我理解的就是 @property……一句话,就代替了声明成员变量、属性、再@synthesize 成员变量 = _对应属性;。这样剩去了好多行代码,还可以在属性关键字设置相应的作用。

(……)
括号内的是属性关键字。对于普通OC对象来说,默认的修饰符是atomicstrongreadwrite;对于基本数据类型来说,默认修饰符是nonatomicassignreadwrite

括号后面的就是数据类型还有相关名称。


着重把自己理解的各个属性关键字解释一下,面试的时候按这么说基本不会挂。

readwrite
可读可写属性,默认是这个属性,系统会自动生成gettersetter方法。

readonly
可读属性,不可写。自动生成getter方法不生成setter方法。

nonatomic
非原子属性,线程不安全的,无锁。但更经常用nonatomic,在多线程并发访问时会提高性能。

atomic
原子属性,线程安全,有锁。

copy
建立一个索引计数为1的对象,在赋值时,使用传入值的一份拷贝。

retain
表示持有属性,强引用,当前对象在被其他对象调用的时候引用计数会自动+1,直到引用计数变为0才会被销毁。setter方法中,读取对象先release,再进行retain操作。

assign
表示赋值属性,应用于基本数据类型,因为基本数据类型是被分配在栈上的某块内存,栈上的内存是由系统自动分配,所以不会出现野指针。setter方法直接赋值,当对象被销毁后,指针不会自动赋nil,会出现野指针。

strong
表示强引用,ARC下使用。当前对象被其他对象调用时引用计数会自动+1,相当于retain。同copy不同的是,strong是两个指针指向同一块内存空间,而copy是拷贝了一份新的空间,两个指针指向不同的内存地址。

weak
表示弱引用,ARC下使用。当前对象的生命周期不被是否由其他对象引用限制,它本该什么时候销毁就什么时候被销毁。即使它的引用没断,但是当它的生存周期到了时就会被销毁。当对象被销毁后,指针自动赋nil。常用在delegate、连线上,防止循环引用。


刚开始学习这部分的时候,还不是特别理解。后来组对记忆,发现有相似的地方,有MRCARC的变化,也有强弱之间的对比,还有相应的一些小对比,瞬间记得变快了。


加油!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值