iOS中属性@property中关键字的使用

版权声明: https://blog.csdn.net/baidu_33440774/article/details/79653415

1、@property是什么

声明属性的语法,可以快速的为实例变量创建setter和getter方法,并允许通过点语法使用

2、@property关键字使用说明

strong 赋值时,调用对象的retain方法,使其引用计数加1

weak 不增加对象的引用计数,也不持有对象,对象被释放时,自动置为nil

copy 创建一个引用计数为1的对象,通常用于修饰NSString和block

assign 修饰基本数据类型(int float double)

atomic 原子操作,提供线程安全,默认属性,耗费系统资源

nonatomic 非原子操作,不提供线程安全,效率更高

unsafe_unretained 和weak类似,引用计数为0,不会自动置为nil

readonly 只读

readwrite 读写,默认属性

3、@property关键字之间的区别

strong和retain的区别:strong和retain都是强引用,大部分情况是可以通用的

在修饰block属性时,通常情况下用copy,如果不用copy,block是存放在栈里面的,它的生命周期会随着函数的结束而出栈的,copy之后会存放在堆里面。strong在修饰block的时候相当于copy,而retain修饰block时相当于assign,这样block会出现被提前释放掉的危险。

copy关键字的使用:

浅拷贝:指针的拷贝,不会产生新的对象,源对象的引用计数加1

深拷贝:对象的拷贝,创建新的对象,源对象的引用计数不变

copy无论修饰不可变对象还是可变对象,copy的结果都是不可变的类型

mutableCopy无论的对象时不可变的还是可变的,拷贝之后的数据类型都是可变的类型

copy对引用计数的影响:

拷贝一个不可变的对象结果是新对象和源对象指向同一个内存地址,即指针的拷贝,属于浅拷贝

拷贝一个可变的对象,会生成一个新对象,不影响源对象的引用计数

mutableCopy对引用计数的影响:

无论对可变类型或对不可变类型使用mutableCopy,都不会影响对象的引用计数

猜你喜欢

转载自blog.csdn.net/baidu_33440774/article/details/79653415