- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我编写了一个大型社交网络 iPhone 应用程序,我遇到的最大问题之一是 NSInteger(以及所有其他 NS 非对象类型)不是一等公民。这个问题源于这样一个事实,很明显,它们没有 nil 值的表示。
这产生了两个主要问题:
解决这个问题的一种方法是始终使用 NSNumber,但这会变得非常困惑。在一个 User 模型对象中,我将有大约 20 个不同的 NSNumber,并且没有简单的方法来判断每个是 float 、整数、 bool 值等。
下面是我对潜在解决方案的看法以及优缺点。我对它们中的任何一个都不感兴趣,所以我想我会征求反馈和/或解决这个问题的替代方案。
正在寻找支持其中一种技术的令人信服的论据,或者如果您有的话,我还没有想到。
更新
我已经开始了一个开源项目 (Apache 2.0),我将在有空的时候将我们的一些内部类引入其中。它目前包括一些更常见的 native 数据类型(BOOL、CGFloat、NSInteger、NSUInteger)的对象包装器。我们选择这样做是因为它将这些数据类型升级为具有严格类型的一等公民。也许您不同意这种方法,但它对我们来说效果很好,所以如果您愿意,请随意使用它。
我正在添加我们发现的其他用途的类,包括磁盘支持的 LRU 缓存、“Pair”对象、低内存释放池等。
最佳答案
将nil
表示为NSInteger
的最常见约定是使用NSNotFound
值。事实上,这等于 NSIntegerMax
,尽管对于读者来说,这是一个表示缺少数字的标记值,但它往往更明显。在很多情况下,它在整个 Cocoa 中都被使用。一种常见的情况是将 NSRange
的位置字段作为 -rangeOfString:
等的返回值。
关于iphone - 解决 NSInteger <-> NSNumber 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4684216/
在简单类的实现中,我在这一行收到错误“无效接收者类型'NSInteger'”: self.price = p; // this line throws error 我应该将价格指定为c
我正在尝试做一件非常简单的事情,但我不知道怎么做; NSInteger * a=10; a=a-1; NSlog(@"a=%d",a); 由于某种原因,它显示 a=6。 怎么可能? 最佳答案 您的问题
我意识到 for 循环可能是执行此操作的最佳方法,我只是不知道每通过 5 个障碍,将 totalScriptures 整数加 1 的正确方法 我有一个类似于 flappybird 的应用程序。一个对象
我想弄清楚如何在 iOS 上获取两位数的 NSInteger(例如 11)并将其转换为 2 个独立的 NSInteger,每个看起来都像“1”。在 NSInteger 中它总是只有 2 位数字,不多不
我正在尝试编写代码来检测一个整数是否大于另一个整数。这可能吗? 这是我到目前为止所做的事情。 if (NumCorrect >> NumWrong) { btnCool.title = @"A
我正在尝试在我准备加载的 View 上设置一个变量。下面是设置它的代码: NSInteger amountOfQuestions = [self.questions.text intValue];
这看起来是一个非常愚蠢的问题,但我不明白为什么会出现错误。 我有一个实例变量声明为: NSInteger *scopeSelected; 我使用这个变量来跟踪在 UISearchDisplay Con
我的 C++ 知识一塌糊涂。我有 Apple 提供的代码,他们像往常一样提供了不完整的解决方案。 在此代码中,他们提供了两个空的方法 header : - (NSString *)encodeBase
一般我看到的声明常量的代码是这样的: static const NSInteger kNum = 1; static NSString * const kStr = @"A"; 我知道为什么const
我正在尝试使用代码从 NSDictionary 中解析一个整数 [activeItem setData_id:[[NSString stringWithFormat:@"%@", [dict valu
NSInteger 是否占用内存?我们应该在 FOR 循环中使用它吗? 最佳答案 看看Apple文档,NSInteger是这样的: #if __LP64__ || TARGET_OS_EMBEDDED
我正在尝试做一些我认为相对简单的事情并获取本周的当前日期,然后在点击按钮时针对该天进行一些检查。为了获取星期几,我在 viewDidLoad 方法中使用了以下代码: NSDate *today = [
我需要将 NSInteger 的最大值存储到 NSInteger 中?执行此操作的正确语法是什么? 谢谢。 最佳答案 NSInteger 的最大值是 NSIntegerMax . 关于cocoa -
这个问题在这里已经有了答案: When to use NSInteger vs. int (8 个答案) 关闭 8 年前。 在 iPhone 编程中使用 NSInteger 与 int 的原因是什么
我正在我的应用程序中创建一个计数器。我想在发生特定更改时增加它。计数器将其值从 0 增加到 1。然后它会固定为 1,并且不再增加。这是我的代码。在 .h 中我已经做到了这一点。 @interface
当我尝试将 nsinteger 值添加到数组中时,它显示警告, Incompatible pointer to integer conversion sending 'NSInteger *' (ak
我确定我遗漏了一些明显的东西,但我想在 Objective C 中创建一个 NSInteger 指针的实例。 -(NSInteger*) getIntegerPointer{ NSInteger
我正在尝试使用以下代码生成随机负 NSInteger, + (NSInteger)getNegativeRandomNumber { uint32_t random = arc4random_
我想知道16位整数、32位整数和64位整数有什么区别,有符号整数和无符号整数的区别(N整数和整数) 最佳答案 我不确定您所说的“16 位整数”、“32 位整数”和“64 位整数”到底是什么类型,但通常
如何检查 NSInteger 是否有效? NSInteger previousScore = [[self score] integerValue]; if (previousScore !=
我是一名优秀的程序员,十分优秀!