保留tableView:cellForRowAtIndexPath的计数:

时间:2010-08-11 17:20:33

标签: iphone retain autorelease uitableview

在Apple的示例代码中,tableView:cellForRowAtIndexPath:的方法UITableViewDataSource返回保留计数为1的单元格;它分配它,但不自动释放它。但是,静态分析器抱怨这违反了Cocoa命名约定,因为方法名称不以'new'等开头。文档没有提到单元格的预期保留计数。细胞有什么保留计数?我应该提交文件的错误吗?感谢。

编辑:我看过的示例代码确实自动释放它,我的眼睛不知何故跳过了它。抱歉浪费你的时间。感谢您的回复。

进一步编辑:如果提问者在某个问题中使用其术语,那么可能会对Clang提出错误。 : - )

5 个答案:

答案 0 :(得分:3)

retainCount的价值并不重要(因为看似不明原因,它可能会上下移动)。但是tableView:cellForRowAtIndexPath:中创建的单元格应该自动释放。你在看什么样的代码?

答案 1 :(得分:2)

哪个示例代码? MyTableViewController.m返回[tableView dequeueReusableCellWithIdentifier:kCellID][[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kCellID] autorelease]

如果示例代码做了不同的事情,那可能就错了。几乎所有方法都遵循Objective-C命名约定;那些不倾向于明确记录的那些。

答案 2 :(得分:0)

保留计数始终至少为1.您将永远不会获得保留计数小于该值的对象,它将是一个前对象。请不要从保留计数中得出结论,或者对它们有所期望,或者甚至不看它们。从来没有永远不会永远不会永远。

可能有一些狡猾的示例代码在这里和那里做错了。忽略它。做正确的事,不要为自己烦恼而烦恼。

答案 3 :(得分:0)

事实上,根本不要使用retainCount。我很困惑,它导致我走向完全错误的方向,我几乎浪费了几天寻找错误的泄漏。如果计数上升或下降,这意味着绝对没有!不要浪费第二次处理它。

使用Leak或Zombie工具要好得多!

(ps也要感谢walkytalky - 因为我看到他也回答了这个!)

答案 4 :(得分:0)

不要担心保留计数。您在allocUITableViewCell cellForRowAtIndexPath:,这意味着您必须释放它或者您有内存泄漏。您无法释放它,因为您必须返回单元格,让表格视图将其绘制为子视图,然后释放它。因此,您autorelease让自动释放池稍后释放它。当你返回它时,它还没有被释放,但后来被系统释放(你只是放弃了它的所有权,这就是你想要的,因为你在返回后不保留对单元格的引用从功能)。