2012-10-15 47 views
0

我实事求是地设置了uitextfields,uisegmentedcontrols一个的tableview等自定义UITableViewCells UITextField强或弱引用?

这里的

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

if (cell == nil) { 

    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 

    //NSLog(@"creating a new %@", CellIdentifier); 

    if([CellIdentifier isEqualToString:@"ID"]) { 

     UITextField *newTextField = [[UITextField alloc] initWithFrame:CGRectMake(80, 5, 215, 34)]; 
     self.idField = newTextField; 
     [cell addSubview:self.idField]; 

    } 
} 

我对所有这些文本字段建立资源并将它们分配给新创建的领域作为一个例子你可以看到。

我的问题是我应该使用(非原子,强)还是(非原子,弱)?

@property(nonatomic, weak) UITextField *idField; 
//Or 
@property(nonatomic, strong) UITextField *idField; 
+0

idField一次只能是一个文本字段。你是否试图在你的财产中存储一个引用到最近创建的文本字段?你最终想要达到什么目标?如果你的意图是保持对你创建的所有文本字段的引用,那么这是不行的。 – geraldWilliam

+0

我有一个idField,upcField,别名字段,说明字段等。我这样做,以便我可以阅读文本字段。即[self.idField.text]它现在正常工作。我只是想知道我应该使用强还是弱 – Hackmodford

回答

0

您不应该为所有这些textFields创建成员变量..您需要第二个textField吗?也许另一种细胞风格足以满足你的目的?例如。 UITableViewCellStyleValue1UITableViewCellStyleValue2UITableViewCellStyleSubtitle

但是,如果您需要自定义标签,只需为其分配一个标签(例如tableViewCell的行),然后通过viewWithTag:检索它。如果你想直接访问自定义的UITableViewCell子类。

直接回答你的问题:在这里可能是一个弱引用就足够了,因为textField被添加到一个单元格中,在任何时候都不会被释放(因为它将被重用)。

+0

实际上它不会被重用,因为只有这种类型的单元格中的一种......但是,如果用户滚动,它将被删除。我有许多不同的文本框,分段控件,图像浏览等不同的tableviewcells,但我需要能够访问它们。 – Hackmodford

+0

当用户向后滚动时,它会再次出现,对吗?所以它被重用。 (在同一地点和相同的内容,但仍然被重用)。意味着:在表被取消分配之前,它不会在任何时候释放。 – calimarkus

+0

只有当我有足够的内存...有时似乎(像我加载图像时)这些细胞确实被释放,我必须重新创建它们。因此,我将他们的内容存储在其他地方,当他们重新创建时,我从存储的内容中加载。除非我误解了某些东西,否则我不同意你的看法。 :)你似乎比我更有知识,所以请填写;) – Hackmodford