当前位置:  开发笔记 > IOS > 正文

我对Objective-C中的不可变副本和可变副本感到困惑

如何解决《我对Objective-C中的不可变副本和可变副本感到困惑》经验,为你挑选了1个好方法。

奇怪的是,没有命令一次删除所有视图的子视图.但是,视图的子视图数组是内部子视图列表的不可变副本,因此循环访问它并一次删除一个子视图是合法的:

for v in myView.subviews as [UIView] {
    v.removeFromSuperview()
 }

这个内容在 编程IOS 8中,如果副本是不可变副本,为什么它可以改变?



1> trojanfoe..:

我不认为你真的在这里询问不可变数组,因为你没有在数组本身上调用任何方法,所以它的可变性不是问题.在的永恒不变的属性subviews阵列是怎样的观点已经决定提出的名单.它与子视图如何与父视图交互无关.

你似乎对为什么子视图可以从父视图中删除而你不能这样做感到困惑; 这只是因为子视图是子UIView类,父视图是UIView子类,因此子视图可以访问父级的所有内部变量,并且可以对父级执行任何喜欢的操作.你不能.这是故意的,因为您不知道视图层次结构的复杂性(并且不希望),UIView显然这样做.

您发布的代码的另一个有趣的方面是,通常在数组中使用数组中的元素将其从数组中删除,这将导致异常.在这种特殊情况下,subviews您从视图接收的数组是copy原始数组(不可变副本),因此获取子视图以从父视图中删除自身不会影响此数组,并且枚举不会动摇.感谢克里斯托弗凯文豪威尔指出这一点,因为我完全错过了它,第一次.

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有