Iphone tableView的保留计数:cellForRowAtIndexPath:

Iphone tableView的保留计数:cellForRowAtIndexPath:,iphone,retain,autorelease,uitableview,Iphone,Retain,Autorelease,Uitableview,在苹果的示例代码中,UITableViewDataSource的方法tableView:cellforrowatinexpath:返回保留计数为1的单元格;它将其分配,但不会自动释放。但是,静态分析器抱怨这违反了Cocoa命名约定,因为方法名不是以“new”等开头的。文档中没有提到单元格的预期保留计数。单元格的保留计数应该是多少?我应该针对文档提交一个bug吗?谢谢 编辑:我看到的示例代码确实自动释放了它,我的眼睛不知怎么跳过了它。很抱歉浪费你的时间。谢谢你的回复 进一步编辑:如果提问者在一个问

在苹果的示例代码中,
UITableViewDataSource
的方法
tableView:cellforrowatinexpath:
返回保留计数为1的单元格;它将其分配,但不会自动释放。但是,静态分析器抱怨这违反了Cocoa命名约定,因为方法名不是以“new”等开头的。文档中没有提到单元格的预期保留计数。单元格的保留计数应该是多少?我应该针对文档提交一个bug吗?谢谢

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


进一步编辑:如果提问者在一个问题中使用它的术语会被吓到,那么应该针对Clang提交一个bug。:-)

retainCount的值其实并不重要(它可能因未知原因而上下波动)。但是在
tableView:cellforrowatinexpath:
中创建的单元格应该自动删除。您正在查看的示例代码是什么?

重新计数的值其实并不重要(它可能会因未知原因而上下波动)。但是在
tableView:cellforrowatinexpath:
中创建的单元格应该自动删除。您正在查看什么示例代码?

哪个示例代码?MyTableViewController.m返回
[tableView dequeueReusableCellWithIdentifier:kCellID]
[[UITableViewCellAlloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kCellID]自动删除]


如果示例代码执行了不同的操作,则可能是错误的。几乎所有方法都遵循Objective-C命名约定;没有明确记录的代码。

哪个示例代码?MyTableViewController.m返回
[tableView dequeueReusableCellWithIdentifier:kCellID]
[[UITableViewCellAlloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kCellID]自动删除]

如果示例代码执行了不同的操作,则可能是错误的。几乎所有方法都遵循Objective-C命名约定;不倾向于明确记录的内容。

保留计数始终至少为1。你永远不会得到一个retain计数小于这个值的对象,它已经是一个ex对象了。请不要从保留计数中得出结论,也不要对它们抱有期望,甚至不要看它们。从来没有

可能有一些不可靠的示例代码做了错误的事情。别理它。做正确的事,不要为剩下的事烦恼。

保留计数始终至少为1。你永远不会得到一个retain计数小于这个值的对象,它已经是一个ex对象了。请不要从保留计数中得出结论,也不要对它们抱有期望,甚至不要看它们。从来没有


可能有一些不可靠的示例代码做了错误的事情。别理它。做正确的事,不要为其余的事烦恼。

事实上,根本不要使用重新计数。我被搞糊涂了,这把我引向了一个完全错误的方向,我浪费了好几天寻找错误的漏洞。如果计数上升或下降,那就毫无意义了!不要浪费一秒钟来处理它

最好使用泄漏或僵尸工具


(另外还要感谢walkytalky——我刚才看到他也回答了这个问题!)

事实上,根本不要使用重新计数。我被搞糊涂了,这把我引向了一个完全错误的方向,我浪费了好几天寻找错误的漏洞。如果计数上升或下降,那就毫无意义了!不要浪费一秒钟来处理它

最好使用泄漏或僵尸工具


(另外还要感谢walkytalky——我刚才看到他也回答了这个问题!)

不要担心保留计数。您的
单元格中的
alloc
UITableViewCell
用于行索引路径:,这意味着您必须释放它,否则内存泄漏。不能释放它,因为必须返回单元格,让表视图将其绘制为子视图,然后释放它。因此,您可以
autorelease
让autorelease池稍后释放它。当您返回它时,它还没有被释放,但稍后会被系统释放(您只是放弃了它的所有权,这是您想要的,因为在它从函数返回后,您不维护对单元格的引用)。

不用担心保留计数。您的
单元格中的
alloc
UITableViewCell
用于行索引路径:,这意味着您必须释放它,否则内存泄漏。不能释放它,因为必须返回单元格,让表视图将其绘制为子视图,然后释放它。因此,您可以
autorelease
让autorelease池稍后释放它。当您返回它时,它还没有被释放,但稍后会被系统释放(您只是放弃了它的所有权,这是您想要的,因为在它从函数返回后,您不维护对单元格的引用)。

Clang SA使用“retain count of 1”表示“由堆栈的当前位拥有”,即
[foo-retain]
[[foo-alloc]init]
的retain计数为1,而
[[foo-retain]autorelease]
[[foo-alloc]init]autorelease]
的retain计数为0。@tc.这很有趣,但可能是个有问题的术语。Clang SA使用“retain count of 1”表示“由当前堆栈位拥有”例如,
[foo-retain]
[[foo-alloc]init]
的retain计数为1,而
[[foo-retain]autorelease]
[[foo-alloc]init]autorelease]的retain计数为0。@tc.这很有趣,但有疑问