美团外卖

2016-12-20  本文已影响10人  羊妞麻麻

1.属性都有哪些修饰符?

assign、strong、copy、readonly、readwite、weak、unsafe_unretained;
assign:用于一般数据类型,比如整型、浮点型等。

strong:属于“拥有关系”,设置方法会先保留新值,并释放旧值,然后在将新值设置上去。

readonly:只读权限,拥有“取方法”。

readwrite:读/写权限,拥有“取、存”方法,若该属性由@synthesize实现,则编译器会自动生成这两个方法。

weak:属于“非拥有关系”,设置方法即不保留新值,也不释放旧值。然而在属性所指的对象遭到摧毁的时候,属性值会清空。

unsafe_unretained:用于对象类型,属于“非拥有关系”,不保留(unretained),当目标对象遭到摧毁的时候,数值型不会自动清空(unsafe,不安全)

copy:与strong类似,然而设置方法并不保留新值,而是拷贝。当属性类型是NSString*时,经常会用此特性来保证其封装性,因为传递给设置方法的新值有可能指向一个NSMutableString类实例。这个类是NSString的子类,表示一种可以修改其值的字符串,此时若是不拷贝字符串,那么设置完属性之后,字符串的值就可能会在对象不经意间被人修改。所以,这时就要拷贝一份不可变的字符串。确保对象中的字符串值不会无意间变动。

2.什么时候用copy?

答:只要属性所用的对象是“可变的”,就应该在设置新属性值时拷贝一份。

3.深拷贝浅拷贝了解吗?

4.GCD中队列有哪几种?

5.dispatch_after 设置3S后,会立即执行吗?为什么?

6.如何实现延迟操作?

7.在属性声明中,总会用到atomic和nonatomic,他们之间有什么区别呢?

答:区别和多线程有关系。
具备atomic特性的获取方法会通过锁定机制来确保其操作的原子性。也就是说,如果两个线程读取同一个属性,无论何时,总能看到有效的属性值。
如果不加锁,那么当其中一个线程正在改写某个属性值的时候,另外一个线程也许会突然闯入,把尚未修改好的属性值读取出来。
发生这种情况时,线程读到的属性值就是不对的。
在iOS开发过程中,一般我们都是直接敲入noatomic,原因是:在iOS中使用同步锁的开销很大,会带来性能的影响。,一般情况下并不要求属性必须是“原子的”,因为并不能保证线程安全。若非要实现线程安全的操作,还需要采用更为深层的锁定机制才行。

上一篇下一篇

猜你喜欢

热点阅读