编辑2:我之前计划的内容可能不错,我现在改变了设计:我的UITableViewController
有一个数组,其中包含UITextField
个的所有值我正在使用委托更新数组中的值。 (如果一个UITableViewCell
中的值发生变化,我会发送一条带有新值和单元格索引的消息。
原始问题
我想创建一个UITableViewCell
子类。要访问我的单元格,我希望NSMutableArray
中包含所有单元格UITableViewController
。每当我在- tableView:cellForRowAtIndexPath:
中创建一个新单元格时,我都会将它添加到数组中。然而,细胞应该知道这个阵列。我会为UITableViewCell
:
@property (nonatomic, assign) NSMutableArray *cellsArray;
每当我创建一个新单元格时,我都会将其cellsArray
设置为我的数组。
我的(可能很简单)问题是:cellsArray
是否会保存指向UITableViewController
中数组的指针并且当我向UITableViewController
的数组添加内容时,是否正确,细胞也会知道这一点,即可以访问它吗?
修改:UITableViewCell
包含UITextField
。我过去依赖于-cellForRowAtIndexPath:
方法和visibleCells
数组,但是当单元格移出视图时,其UITextFields
的内容也会丢失。然后我决定将单元格存储在一个数组中。当用户点击保存时,我遍历数组并存储值。此外,我想自动更新保存按钮的enabled
属性,具体取决于所有单元格是否包含某些内容 - 为此我也需要所有单元格。
单元格应该知道其他单元格,以便在按下键盘上的return / next键时可以选择下一个单元格。
如果有更好的方法,我很高兴听到他们!
答案 0 :(得分:2)
不是你问题的直接答案,但这听起来像是一个非常糟糕的设计。为什么一个细胞需要知道它的兄弟姐妹?在一个单元格中发生并对其他单元格产生影响的任何事件/更改都应由表视图控制器处理。单个单元格应该是独立的实体,不需要知道彼此的状态。
其次,不需要引入另一个数组来管理表格单元格。表视图已经具有可以从表视图控制器访问的属性visibleCells
。并且永远不应该与不可见的单元进行交互,因为它们由表视图及其重用工具管理。
答案 1 :(得分:1)
我相信答案是肯定的。
我对assign
的理解是,您可以为这样的变量赋值,并且不会增加原始对象的保留计数。同样,您不需要在对象的dealloc
方法中释放变量。但是,您可能会冒险将原始阵列消失,然后cellsArray
指向不再存在的内容。
当我想将对象的引用传递给另一个对象(例如,将要显示或以其他方式操纵对象的视图控制器)时,我使用assign
。在后一个对象中,我没有释放它指向对象的指针。
您还会看到assign
与id
的属性一起使用,例如
@property (nonatomic, assign) id<SomeProtocol> _myDelegate;
所有这一切,除id
案例外,我常常觉得“更安全”使用retain
作为属性,并确保在dealloc
中发布。 : - )
无论如何,我认为这是差异的关键。