繁体   English   中英

保留tableView:cellForRowAtIndexPath的计数:

[英]Retain count for tableView:cellForRowAtIndexPath:

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

编辑:我看过的示例代码不会自动释放它,我的眼睛以某种方式跳过了它。 抱歉浪费您的时间。 感谢您的答复。

进一步编辑:如果提问者因在问题中使用其术语而被跳过,则可能应针对Clang提交一个错误。 :-)

retainCount的值并不是很重要(它可能会因似乎未知的原因而上升和下降)。 但是在tableView:cellForRowAtIndexPath:创建的单元格应该被自动释放。 您在看什么示例代码?

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

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

保留计数始终至少为1。您永远都不会取回保留计数小于该值的对象,因为它已经是前对象了。 请不要从保留计数中得出结论,也不要对保留计数抱有期望,甚至不要看待它们。 永远永远永远不会永远永远不会永远。

可能到处都是狡猾的示例代码,这些地方做错了事。 忽略它。 做正确的事情,不要为其余的事情烦恼。

实际上,根本不要使用keepCount。 我非常困惑,这将我引向完全错误的方向,我浪费了数天时间寻找错误的漏洞。 这意味着如果计数增加或减少绝对没有! 不要浪费第二时间处理它。

最好使用Leak或Zombie工具!

(ps也要感谢walkytalky-我刚刚看到他也回答了这个问题!)

不用担心保留数。 alloc一个UITableViewCell在你cellForRowAtIndexPath:这意味着你必须将其释放,或者你有内存泄漏。 您不能释放它,因为您必须返回单元格,让表格视图将其绘制为子视图,然后释放它。 因此,您可以autorelease它,以使自动释放池在以后释放它。 当您返回它时,它尚未被释放,但是稍后会被系统释放(您只是想要放弃它的所有权,这是您想要的,因为在返回它之后,您无需维护对该单元的引用从功能)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM