Objective-C Bool文字和宏

Ari*_*des 3 objective-c

免责声明:Objective-C知识有限(传递好奇心).

if (@YES)
Run Code Online (Sandbox Code Playgroud)

VS

if (YES)
Run Code Online (Sandbox Code Playgroud)

有什么不同?

根据我的理解,@ YES是一个bool对象文字,YES是一个扩展为1的宏?它是否正确?如果是这样,为什么使用@YES代替YES,反之亦然?

Dru*_*erB 6

@YES是一个快捷方式[NSNumber numberWithBool:YES],所以这个:

if (@YES)
Run Code Online (Sandbox Code Playgroud)

实际意味着

if ([NSNumber numberWithBool:YES] != nil)
Run Code Online (Sandbox Code Playgroud)

注意,无论是什么数字(或bool值)都无关紧要.你只是测试它是一个有效的对象.如果你像那样测试它,甚至@NO会评价YES,因为它是一个非零NSNumber实例:

if (@NO) NSLog(@"test");
Run Code Online (Sandbox Code Playgroud)

输出:

2013-12-07 21:02:49.828 MyApp[37512:70b] test
Run Code Online (Sandbox Code Playgroud)

长话短说:不要使用@YES或不@NO喜欢它,它们不会像你期望的那样表现.