https://github.com/ChenYilong/iOSInterviewQuestions/
(1)ios后台执行的操作类型:
<1>Tracking the User’s Location - 跟踪用户的位置:
分为三类:
重大变更的位置服务(推荐):只有当用户的位置发生重大变化时才会生成位置更新
仅前台位置服务:仅在前台进行位置更新,后台并不执行
后台定位服务:后台会继续提供位置服务更新
<2>assin和weak的区别跟用法
什么情况使用 weak 关键字?
1.在 ARC 中,在有可能出现循环引用的时候,往往要通过让其中一端使用 weak 来解决,比如: delegate 代理属性
2.自身已经对它进行一次强引用,没有必要再强引用一次,此时也会使用 weak,自定义 IBOutlet 控件属性一般也使用 weak;当然,也可以使用strong。在下文也有论述:***《IBOutlet连出来的视图属性为什么可以被设置成weak?》***
不同点:
1.`weak`此特质表明该属性定义了一种“非拥有关系” (nonowning relationship)。为这种属性设置新值时,设置方法既不保留新值,也不释放旧值。此特质同assign类似,
然而在属性所指的对象遭到摧毁时,属性值也会清空(nil out)。
而`assign`的“设置方法”只会执行针对“纯量类型” (scalar type,例如 CGFloat 或
NSlnteger 等)的简单赋值操作。
2.assign 可以用非 OC 对象,而 weak 必须用于 OC 对象
3.怎么用 copy 关键字?
1.NSString、NSArray、NSDictionary 等等经常使用copy关键字,是因为他们有对应的可变类型:NSMutableString、NSMutableArray、NSMutableDictionary;
2.block 也经常使用 copy 关键字
下面做下解释:
copy 此特质所表达的所属关系与 strong 类似。然而设置方法并不保留新值,而是将其“拷贝” (copy)。
当属性类型为 NSString 时,经常用此特质来保护其封装性,因为传递给设置方法的新值有可能指向一个 NSMutableString 类的实例。这个类是 NSString 的子类,表示一种可修改其值的字符串,此时若是不拷贝字符串,那么设置完属性之后,字符串的值就可能会在对象不知情的情况下遭人更改。所以,这时就要拷贝一份“不可变” (immutable)的字符串,确保对象中的字符串值不会无意间变动。只要实现属性所用的对象是“可变的” (mutable),就应该在设置新属性值时拷贝一份。
4. 这个写法会出什么问题:`@property (copy) NSMutableArray *array;`
两个问题:
1、添加,删除,修改数组内的元素的时候,程序会因为找不到对应的方法而崩溃.因为 copy 就是复制一个不可变 NSArray 的对象;
2、使用了 atomic 属性会严重影响性能 ;
网友评论