Ios 零对针织品

Ios 零对针织品,ios,objective-c,null,Ios,Objective C,Null,不久前,我发现enumkNilOptions等于0。 我试图使我的代码最具可读性,但我想知道当您有采用选项参数的方法时,最好使用什么,例如: [NSData dataWithContentsOfFile:imageURL.path options:kNilOptions error:&error]; 我通常在我读的很多代码中看到nil,但我认为kniploptio

不久前,我发现enum
kNilOptions
等于0。 我试图使我的代码最具可读性,但我想知道当您有采用选项参数的方法时,最好使用什么,例如:

[NSData dataWithContentsOfFile:imageURL.path
                               options:kNilOptions
                               error:&error];
我通常在我读的很多代码中看到
nil
,但我认为
kniploptions
会更准确。我很少(几乎从未)看到针织品。这有什么原因吗


你认为使用它可以吗?还是只使用
nil
更好?

我认为
0
kNilOptions
更易读,而且
kNilOptions
是“旧的”

应使用
nil
表示未初始化的Objective-C对象引用,并使用
NULL
表示未初始化的C指针(
void*
char*
等)


如果
选项
没有提供“无”值,则使用
0

是一个旧常量,用于记录
0
不仅仅是任何魔法零,而是代表“无选项”。从这个意义上说,它的使用是有效的,尽管我个人认为在Objto-C上下文中(它的大部分使用在C中)是相当丑陋的。在developer.apple.com上搜索
options:kNilOptions
vs
options:0
也显示
options:0
是他们的首选款式

至于
nil
,它是对象的Objective-C等价于空指针,不应用于表示数字
0
(这里就是这种情况)


当参数是包含自己的“无选项”值的
enum
类型时,您应该使用该值,但在
NSData
的情况下,参数不是
enum
,而是
typedef
'd
NSUInteger
,并且它没有自己的“无选项”定义的值。

可能最终为零的各种事物用于不同的目的。不使用正确的代码可能不会影响代码,但任何阅读您的代码的人都会产生怀疑,并会在验证代码是否有意义时陷入困境

  • 0
    =整数零

  • 0.0
    =双精度浮点数0

  • '\0'
    =nul字符,用作C字符串的分隔符

  • <> >代码> null <代码> =没有指向任何东西的C或C++指针。

  • nil
    =不指向任何对象的Objective-C对象指针 (作为一个实现细节,
    nil==0
    恰好计算为true,但是不要使用
    nil
    而不是
    0
    /
    false

  • Nil
    =不指向任何类的Objective-C类指针

  • kNilOptions
    (在本例中)=描述没有选项的枚举常量


即使Apple使用它,如果您只是将
0
用于NSEnum/NSOption值,AppCode也会警告您,因为您使用的是整数而不是枚举值

因此,您需要将
0
显式强制转换为正确的枚举类型:

[NSData dataWithContentsOfFile:imageURL.path
                       options:(NSDataReadingOptions)0
                         error:&error];
或者使用
kNilOptions
这是一个匿名枚举值:

[NSData dataWithContentsOfFile:imageURL.path
                       options:kNilOptions
                         error:&error];
我建议使用更晚的解决方案,
kNilOptions
,而不是
(NSDataReadingOptions)0
,以避免手动编写C-cast


对象指针也会出现同样的问题

您需要将
0
显式强制转换为指针:

[NSData dataWithContentsOfFile:imageURL.path
                       options:readOptionsMask
                         error:(void*)0];
或者使用
nil
,这是对指针本身的强制转换:

[NSData dataWithContentsOfFile:imageURL.path
                       options:readOptionsMask
                         error:nil];

每个人都会推荐更晚的解决方案,
nil
而不是
(void*)0
,以避免手动编写C-cast。

AFAIK,但我可能错了,kNilOptions来自MacTypes.h或类似产品,而且非常陈旧过时。苹果似乎更喜欢0或0。看看所有的例子。他们从不使用kNilOptions。如果您只使用“0”,AppCode将发出一些警告。最好使用
kNilOptions
明确表示您正在使用枚举值@Cœur听起来像是AppCode坏了。不是说它坏了,而是说
0
不适合枚举值,就像
0
不适合对象引用一样。@Cœur如果编译器对代码满意,但IDE不满意,那么IDE就坏了。但是
0
一点也不像
kNilOptions
那样清楚。例如,祝您在整个项目中搜索未指定选项的位置时好运。
nil
不正确,因为它表示不指向任何对象的Objective-C对象。在
错误:
参数的上下文中,它是指向Objective-C对象指针的指针,因此通常应为
NULL
。AppCode无法处理Xcode所能处理的语法,这一事实暗示AppCode已被破坏,编码人员不必改变它的不足之处。