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

关于第5题:如何重写带 copy 关键字的 setter

iamqk opened this issue · comments

commented

这里苹果使用
if (_name != name) {
//[_name release];//MRC
_name = [name copy];
}

这样的写法是有原因的
由于大部分对象的引用是strong,因此某个对象的属性可能被引用了很多地方,然后在回到当前的位置赋值,并不是简单的self.x = self.x的情况
其次,大型对象的copy是十分耗费资源的动作,因此在这种情况下加了判断,能够节约不少资源
再次,除了一些特殊的小型对像copy是假copy,其余的都要进行真copy的动作,如果这样的话,一个if判断的消耗,远远小于一个copy动作的消耗