Ios 零对针织品
不久前,我发现enumIos 零对针织品,ios,objective-c,null,Ios,Objective C,Null,不久前,我发现enumkNilOptions等于0。 我试图使我的代码最具可读性,但我想知道当您有采用选项参数的方法时,最好使用什么,例如: [NSData dataWithContentsOfFile:imageURL.path options:kNilOptions error:&error]; 我通常在我读的很多代码中看到nil,但我认为kniploptio
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
vsoptions:0
也显示options:0
是他们的首选款式
至于nil
,它是对象的Objective-C等价于空指针,不应用于表示数字0
(这里就是这种情况)
当参数是包含自己的“无选项”值的
enum
类型时,您应该使用该值,但在NSData
的情况下,参数不是enum
,而是typedef
'dNSUInteger
,并且它没有自己的“无选项”定义的值。可能最终为零的各种事物用于不同的目的。不使用正确的代码可能不会影响代码,但任何阅读您的代码的人都会产生怀疑,并会在验证代码是否有意义时陷入困境
=整数零0
=双精度浮点数00.0
=nul字符,用作C字符串的分隔符'\0'
<> >代码> null <代码> =没有指向任何东西的C或C++指针。
=不指向任何对象的Objective-C对象指针 (作为一个实现细节,nil
恰好计算为true,但是不要使用nil==0
而不是nil
/0
)false
=不指向任何类的Objective-C类指针Nil
(在本例中)=描述没有选项的枚举常量kNilOptions
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已被破坏,编码人员不必改变它的不足之处。