- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我以前从未意识到这种二分法,所以我需要问你。假设我们有某种模型管理器类,它将通过公共(public)属性公开对象的 NSArray。这是我们的模型。现在我还有一个 View Controller ,它在 tableview 单元格中显示该数组的成员。我将这个 NSArray 设置为 tableview 的数据源。但是,如果我希望我的模型及时更改数据怎么办?
我有两个选择。1)使数组可变。2) 将实例 NSArray 替换为包含新数据的不同实例。
选项 1 的问题是任何人都可以更改数组的内容,这似乎是错误的。选项 2 的问题是 tableViewController 将愉快地继续指向原始数组实例,而忽略管理器类现在指向一个新实例(因为它用具有更新数据的实例替换了它的属性数组实例。)。
总而言之,我想要一个数组实例,它只能从模型管理器中改变,但对于外界是不可变的。哪一个是不可能的?有什么想法可以解决这个问题吗?
最佳答案
管理数组的对象也应该是 TableView 的数据源,或者 TableView 的数据源应该始终确保在 TableView 重新加载其数据之前从管理数组的对象获取数组的新副本。
无论哪种方式,表格 View 的数据源正在使用的数组最终应该是一个不可变的数组,并且任何时候这个数组被改变,都应该立即调用reloadData
.
这将防止数组中的数据在显示数据的 TableView 中间被修改。例如,如果数组的内容在 numberOfRowsInSection:
被调用后发生变化,那就很成问题了。
关于ios - 模型 NSArray 是可变的还是不可变的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24233746/
COW 不是奶牛,是 Copy-On-Write 的缩写,这是一种是复制但也不完全是复制的技术。 一般来说复制就是创建出完全相同的两份,两份是独立的: 但是,有的时候复制这件事没多大必要
我是一名优秀的程序员,十分优秀!