NSNotFound的可用性是多少?

Ben*_*ero 7 code-documentation foundation ios

这个in-Xcode文档NSNotFound非常令人困惑:

它说"可在iOS 2.0到8.4中使用"和"可用性:iOS 8.1到8.0".那么...... 它在8.0之前可用吗?还是9.0+?此外,这里发生了什么,如果是的话?

JAL*_*JAL 7

在availabilityOfNSNotFound == NSNotFound这里插入笑话.


在Apple推出强制性64位设备支持(iOS 8.4 SDK?)的某个时候,声明NSNotFound已从以下变更:

enum {NSNotFound = NSIntegerMax};
Run Code Online (Sandbox Code Playgroud)

至

static const NSInteger NSNotFound = NSIntegerMax;
Run Code Online (Sandbox Code Playgroud)

你可以验证这个<Foundation/NSObjCRuntime.h>.

文档从未更改过,因此enum NSNotFoundSDK 的可用性不再存在.但是从iOS 9及更高版本开始,static const NSInteger NSNotFound它可用.

虽然我无法回答真正的可用性,NSNotFound因为我不为Apple工作(作为开发人员,我认为从2.0开始在所有iOS版本中使用都是安全的,否则许多基础课程会因为可以返回而破坏NSNotFound),你可以检查内存位置是否NSNotFound为NULL:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wtautological-compare"
BOOL found = (&NSNotFound != NULL);
#pragma clang diagnostic pop
if (found) {
    NSLog(@"meh");
}
Run Code Online (Sandbox Code Playgroud)