gpt4 book ai didi

iphone - 在 NSInteger 返回类型方法上返回 nil

转载 作者:太空狗 更新时间:2023-10-30 03:25:27 26 4
gpt4 key购买 nike

我有以下 UITableView 数据源方法:

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index 

在某些项目上(即部分索引标题)我只想返回“无”,以便表格 View 不会跳转到任何部分。我试图返回 nil,但我得到了“Return makes integer from pointer without a cast”- 警告,因为 NSInteger 显然不是一个对象,只是 32/64 位整数的 typedef。

我怎样才能实现对特定部分索引标题的无返回/ react ?

最佳答案

返回 nil 在这里是一个错误,因为您返回的是整数基元,而不是对象。 (您会收到转换警告,因为 nil 实际上是一个 #define,它的计算结果为 ((void *)0),这是一个空指针,而不是整数零。)与 Cocoa 接口(interface)的 Objective-C 代码的最佳选择可能是使用 NSNotFound#define 对于 NSIntegerMax,它在整个 Cocoa 中用于表示给定值在接收器中不存在等。(另一种选择是使用 -1,这更常见在 C 代码中。什么最有效取决于调用代码期望和可以处理的内容。)

尽管 NSNotFound 是一个带符号的值,但它足够大,您不太可能遇到范围问题。 (NSIntegerMax 大约是 NSUIntegerMax 的一半,在 32 位环境中,很少有人能够接近 2,147,483,647 个对象——更不用说两倍了。在 64 位环境中,忘掉它;在用完索引的整数之前,您的机器中的物理 RAM 就会用完。)

说到这里,Cocoa 的约定是使用NSUInteger(而不是NSInteger)作为索引。无符号整数不能为负数,这为索引值提供了一些完整性保护;除其他事项外,更容易解决意外的整数溢出/下溢。如果这是自定义数据源方法(看起来是这样),我强烈建议改用无符号整数。 (这可能有助于记住/意识到 NSIntegerNSUInteger 占用相同数量的字节,它们只是对位的解释不同,所以你不会“浪费”任何空间通过切换类型。)

关于iphone - 在 NSInteger 返回类型方法上返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2023542/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com