if(obj && obj!= nil)是否正确且必要?

Dou*_*ugW 3 iphone cocoa cocoa-touch objective-c null-test

这个问题的两个部分

1)对正在发生的事情的理解是正确的吗?
"if(obj)"正在测试以查看指针是否不是0x0,也就是设置为整数存储器地址
"if(obj!= nil)"将对象的内存地址与通用nil对象的内存地址进行比较

2)所以在我不知道变量是否指向任何东西的情况下,如果是,我也不知道该对象是否是有效对象或nil.我希望根据这些信息做各种各样的事情,而不仅仅是将信息传递给obj,如果它是零,我认为这是安全的.这段代码是正确还是必要的?

if (obj && obj != nil) {
    // Do a bunch of things that should only happen if obj is pointing to a valid object
    [obj someMessage];
    [anotherObj someOtherMessage];
}
Run Code Online (Sandbox Code Playgroud)

多谢你们!

Ben*_*ack 17

正确?是.必要?号Objective-C的简单#defineš nil(void *)0,这是,在C的术语,假.所以简单写作

if (obj) {
    [obj someMessage];
    [anotherObj someOtherMessage];
}
Run Code Online (Sandbox Code Playgroud)

足够了.此外,由于Objective-C有消息nil,你可以在某些情况下简单地省略检查.(例如,如果第二行不在该if区块中,则可以简单地[obj someMessage]无差别地调用.)


Ben*_*ieb 12

这是正确的,因为它会给你你期望的结果,但多余.只需使用就足够了:

if (obj) {
Run Code Online (Sandbox Code Playgroud)

要么

if (obj != nil) {
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢你的回答.赞成正确性,但我要将Ben的标记作为解释背后推理的答案. (2认同)