UITableViewCell AutoRelease造成崩溃......?

时间:2011-05-06 08:20:51

标签: iphone cocoa-touch ios uitableview autorelease

不确定是否有人知道UITableViewCells的数量是否存在实际限制,并且不断重复使用...?首先,我很清楚所有的Obj-C / Apple内存管理规则,(我将首先说明这一点,所以我不浪费任何时间,而且他们不会浪费我的)

所以我会直接问这个......对于重用UITableViewCell的“自动释放”机制是否存在一些实际限制?因为我似乎只是经历了一定数量后的崩溃,通常超过50页的细胞(大约50页+ 50个细胞)被翻过来......然后在没有地方我会得到这个崩溃..有时从来没有发生的事情,有时经常发生,取决于内容密度......

开始自己手动保留和释放会更好吗? 如果是这样,有人会有经验推荐一个好的地方来释放它们吗?

[tableview tableView:cellForRowAtIndexPath:]: message sent to deallocated instance 0x14e0a920

好的....我没有找到任何与实际的UITableViewCell(单元格内容或单元格本身)有关但在向Controller(实例化UITableView对象)添加一些保留后,“崩溃”神秘地停止出现...

这是我改变的。基本上我添加了三个Retain语句,顺便说一句,我使用原始的示例教程“如何” - 来自自称“Iphone专家”的“​​UITabBarController”,但“专家”否定包括保留.... (这只是代码的适用部分......)

//initialize the UITabBarController
tabBarController = [[UITabBarController alloc] init];
TabBarControllerSet = TRUE;

//Create the first UITabBarItem
MainMessageBoard *mainMessageBoard = [[MainMessageBoard alloc] initWithController: self];
[mainMessageBoard setTitle:@"?????"];
[mainMessageBoard retain];    ////******** ADDED This RETAIN ***********

//Create the second UITabBarItem
PostNewComment *postNewComment = [[PostNewComment alloc] initWithController: self];
[postNewComment setTitle:@"????"];
[postNewComment retain];  ////******** ADDED This RETAIN ***********

//Create the third UITabBarItem
logout *Logout = [[logout alloc] initWithController: self];
[Logout setTitle:@"?????"];
[Logout retain];   ////******** ADDED This RETAIN ***********


//add the UIViewControllers to the UITabController
tabBarController.viewControllers = [NSArray arrayWithObjects:mainMessageBoard, postNewComment, Logout, nil];
[tabBarController setDelegate:self];

//release
[mainMessageBoard release];
[postNewComment release];
[Logout release];

[self.view addSubview:tabBarController.view];

1 个答案:

答案 0 :(得分:1)

AFAIK它仅限于设备上的内存空闲 - 我假设它在自动释放池和表格视图的可重用单元格中使用某种动态集(即NSSet或更低级别的等效单元格)。

我已经使用了数万行的表视图而没有任何问题。