当前位置:   iOS > 正文

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

ios,subviews,swift,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工具,开发人员工具,站长工具

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

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

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



1> trojanfoe..:

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/iOS/detail/8339
推荐阅读
相关标签
  

闽ICP备14008679号