ChenYilong / iOSInterviewQuestions

iOS interview questions;iOS面试题集锦(附答案)--学习qq群或 Telegram 群交流 https://github.com/ChenYilong/iOSBlog/issues/21

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

第2题

Deeer opened this issue · comments

weak 此特质表明该属性定义了一种“非拥有关系” (nonowning relationship)。为这种属性设置新值时,设置方法既不保留新值,也不释放旧值。此特质同assign类似, 然而在属性所指的对象遭到摧毁时,属性值也会清空(nil out)。 而 assign 的“设置方法”只会执行针对“纯量类型” (scalar type,例如 CGFloat 或 NSlnteger 等)的简单赋值操作。

第一,所谓的‘设置方法既不保留新值,也不释放旧值’有什么含义?
第二,这里的 ‘此特质同assign类似’ ,先不说内容,进从语义上讲,似乎标点不对。
第三,‘然而...'之后的内容,和 之后的 ‘而assign...’并没有形成对比

不知是语言组织不对,还是我个人理解错了,望解答

谈一下我的理解:
第一,既不保留新值也不释放旧值的含义是指:关键字为strong属性(MRC中的retain属性)的setter方法中,会自动对旧的值进行一次release操作,对新的值进行一次retain操作,也就是保留新值释放旧值。而关键字为weak属性的setter方法则不会进行上述操作。
第二,特质与assign类似是指第一中提到的“既不保留旧值也不释放新值”这个特性,标点的话......确实有误,不过没必要太过纠结吧。
第三,确实答者的语言组织有些不佳,前后没有明显联系。weak属性会自动置为nil之前不需要加“然而”的转折,assign的setter可以另起一个段落单独介绍。

@Deeer