美文网首页程序员
IOS小知识课堂(不定时更新)

IOS小知识课堂(不定时更新)

作者: Mr姜饼 | 来源:发表于2018-08-10 16:35 被阅读32次

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 属性会严重影响性能 ; 

 6. @property 的本质是什么?ivar、getter、setter 是如何生成并添加到这个类中的?

相关文章

网友评论

    本文标题:IOS小知识课堂(不定时更新)

    本文链接:https://www.haomeiwen.com/subject/oplcvftx.html