数组字典字符串等作为属性的修饰符用strong还是copy?

来源:互联网 发布:word无法访问网络位置 编辑:程序博客网 时间:2024/05/10 03:30

经常面试时会问道这样一个问题?这个问题到底应该怎么回答呢?我想要说都对,也都不对。为什么呢?因为无论用copy还是strong,用对了都对用不对都不对。下边我就说说每种使用的优缺点:
1.copy
(1)用copy优点:处理除不可变数组,不可变字符串,不可变字典外,调用属性的set方法,得到的是一个新对象,与赋值的对象是两个对象两个互不影响。当然这里说的并不是绝对互不影响,最起码复制出了指针中的指针变量。
(2).copy的缺点:处理除不可变数组,不可变字符串,不可变字典外,把一个可变数组
这里写图片描述
你一调用set方法的copy,self.Marr这个指针就指向了一个全新的不可变数组,因此你这样操作必崩溃。
2.strong
(1)strong优点
同样是上边的代码,改用strong就不会崩溃。因为调用set方法时,并没有进行copy,只是进行了指针引用。因此操作的是同一个可变数组。
这里写图片描述
(2)strong缺点:如下图可知,调用属性的set方法之后,等号前和等号后还是同一个指针。这样操作一个另外一个也变化了,有错的话不好跟踪。
这里写图片描述
因此想使用什么修饰符,都随你的便,只要不出错就行了。想知道具体怎么不出错是在不理解的话,在下边留言。。。。。
【注释】
1.想理解我说的,先搞清楚copy的set方法怎么写?我前边有论述。

0 0
原创粉丝点击