这个问题分为两部分
1)这种理解是否正确?
“if(obj)”正在测试指针是否不是0x0,也就是设置为整数内存地址
“如果(obj!=nil)”是比较对象的内存地址和通用nil对象的内存地址
2个)
所以在我不知道变量是否指向任何东西的情况下,如果指向任何东西,我也不知道那个对象是有效的对象还是零。我想根据这些信息做很多事情,而不仅仅是向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];
}
谢谢你们!
最佳答案
对的?对。必要吗?不,objective-c只是#define
snil
到(void *)0
,用c来说,这是错误的。所以简单的写作
if (obj) {
[obj someMessage];
[anotherObj someOtherMessage];
}
已经足够了。此外,由于objective-c具有消息吃
nil
,因此在某些情况下可以简单地省略检查。(例如,如果第二行不在if
块中,则可以不加选择地调用[obj someMessage]
。)