关于分配属性的问题

时间:2011-04-13 13:59:48

标签: iphone properties uitableview

编辑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键时可以选择下一个单元格。

如果有更好的方法,我很高兴听到他们!

2 个答案:

答案 0 :(得分:2)

不是你问题的直接答案,但这听起来像是一个非常糟糕的设计。为什么一个细胞需要知道它的兄弟姐妹?在一个单元格中发生并对其他单元格产生影响的任何事件/更改都应由表视图控制器处理。单个单元格应该是独立的实体,不需要知道彼此的状态。

其次,不需要引入另一个数组来管理表格单元格。表视图已经具有可以从表视图控制器访问的属性visibleCells。并且永远不应该与不可见的单元进行交互,因为它们由表视图及其重用工具管理。

答案 1 :(得分:1)

我相信答案是肯定的。

我对assign的理解是,您可以为这样的变量赋值,并且不会增加原始对象的保留计数。同样,您不需要在对象的dealloc方法中释放变量。但是,您可能会冒险将原始阵列消失,然后cellsArray指向不再存在的内容。

当我想将对象的引用传递给另一个对象(例如,将要显示或以其他方式操纵对象的视图控制器)时,我使用assign。在后一个对象中,我没有释放它指向对象的指针。

您还会看到assignid的属性一起使用,例如

@property (nonatomic, assign) id<SomeProtocol> _myDelegate;

所有这一切,除id案例外,我常常觉得“更安全”使用retain作为属性,并确保在dealloc中发布。 : - )

无论如何,我认为这是差异的关键。