Ios面试复习--@property修饰符号

1.读写设置

Ios面试复习--@property修饰符号_第1张图片
@property 读写设置

2.retain

自动在set 方法中添加堆引用对象内存管理的方法 并release旧值 retain新值

Ios面试复习--@property修饰符号_第2张图片
set方法中的内存管理方法

retain 修饰需要计数的属性

3.assign

--1.不会生成set方法内的内存管理的代码,仅仅只会生成普通的set方法,系统默认修饰符号为assign 

--2.assign适用于基本数据类型如int,float,struct等值类型,不适用于引用类型。因为值类型会被放入栈中,遵循先进后出原则,由系统负责管理栈内存。而引用类型会被放入堆中,需要我们自己手动管理内存或通过ARC管理。

--3.assign如果修饰对象,会产生野指针问题;如果修饰基本数据类型则是安全的。修饰的对象释放后,指针不会自动被置空(nil),此时向对象发消息会崩溃。

4.atomic & nonatomic

atomic 原子性 单线程 性能低 (默认属性

nonatomic 非原子性 多线程 性能高

5.strong

在ARC 下 保存一个对象用strong 相当于MRC下的retain

6.copy

--1.NSString 和其子类需要用Copy修饰 (防止外部修改属性)

若不使用copy 而使用其他别的属性,会造成对象属性指向,str修改,对象属性也随之改变

Ios面试复习--@property修饰符号_第3张图片
Person对象有两个字符串属性 分别用copy和strong修饰
Ios面试复习--@property修饰符号_第4张图片
分别对两个字符串赋值 并修改源字符串的值
Ios面试复习--@property修饰符号_第5张图片
通过结果发现,strong修饰的字符串指向源字符串,而copy修饰的字符串为深copy一个新的字符串对象

--2.Block 

Block也需要使用copy关键字将默认产生于栈的Block 转移致 堆中

这样在Blcok中引用外界参数时,Block会对该参数retain,保住外界对象不会被提早释放

防止在Block调用时 外界参数已经被释放调用野指针

你可能感兴趣的:(Ios面试复习--@property修饰符号)