gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 05:57:52 24 4
gpt4 key购买 nike

奇怪的是,没有一次删除所有 View subview 的命令。然而,一个 View 的 subview 数组是 subview 内部列表的不可变副本,因此它是合法的循环遍历它并一次删除每个 subview :

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

此内容在Programming IOS 8中,如果副本是不可变副本,为什么它可以更改?

最佳答案

我不认为你真的在这里询问不可变数组,因为你没有在数组本身上调用任何方法,所以它的可变性不是问题。 subviews 数组的不可变属性是 View 如何决定将列表呈现给。它与 subview 如何与父 View 交互无关。

您似乎对为什么 subview 可以将其自身从父 View 中删除而您不能这样做感到困惑;这是因为 subview 是 UIView 的子类,而父 View 是 UIView 的子类,因此 subview 可以访问父 View 和 subview 的所有内部变量可以对 parent 为所欲为。你不能。这是故意的,因为您不知道 View 层次结构的复杂性(并且不想知道),而 UIView 显然知道。

您发布的代码的另一个有趣的方面是,在枚举数组时,经常让数组中的元素从数组中删除它自己,这会导致异常。但是,在这种特殊情况下,您从 View 中收到的 subviews 数组是原始 View 的 copy(不可变副本),因此让 subview 从父 View 中删除自身view 不会影响这个数组,枚举也不会动摇。感谢 Christopher Kevin Howell 指出这一点,因为我第一次完全错过了它。

关于ios - 我对 Objective-C 中的不可变副本和可变副本感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34330705/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com