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)