有人能指出我特定的“id类型文档”吗?我一直在浏览动态类型文档,但我想知道如何使用类型ID。具体如何检查id是否为null。
答案 0 :(得分:3)
id
类型与Objective-C语言本身直接相关,而不是原始标签所暗示的Cocoa / Cocoa Touch框架。也没有涉及动态类型。 Here's a little introduction in Apple's docs.
要回答您的具体问题,请参阅以上链接:
关键字
nil
被定义为空对象,id
的值为0
。id
,nil
以及其他基本类型的Objective-C在头文件objc/objc.h
中定义。
nil
和NULL
是等价的(零指针),因此可以互换。
在基本的if语句中,您只需执行此操作:
id myId = [[something alloc] init];
// Short for if (myId == nil)
if (!myId) {
// myId is nil
} else {
// myId is not nil
}
答案 1 :(得分:1)
请参阅The Objective-C Programming Language - 特别是关于对象,类和消息传递的章节。
在Objective-C中,对象标识符具有不同的数据类型:id。此类型是任何类型对象的通用类型,与类无关,可用于类的实例和类对象本身。 [...]
关键字nil被定义为一个空对象,一个值为0. id,nil的id,其他基本类型的Objective-C在头文件objc / objc.h中定义。
要按值比较变量,只需使用==运算符即可。所以要测试nil,你可以:
someVariable == nil
答案 2 :(得分:1)
我没有在任何其他答案中明确说明,所以我会在这里说:
id
被定义为指向对象的指针。
nil
被零转换为id - (id)0 - 结果如下代码:
NSString * myString = nil;
id idString = myString;
if (idString == nil) NSLog(@"idString == nil");
if (idString == NULL) NSLog(@"idString == NULL");
if (idString == (id)0) NSLog(@"idString == (id)0");
将具有以下输出:
2011-09-12 07:25:57.297 Sample Project[22130:707] idString == nil
2011-09-12 07:25:57.298 Sample Project[22130:707] idString == NULL
2011-09-12 07:25:57.299 Sample Project[22130:707] idString == (id)0
答案 3 :(得分:0)
很抱歉,如果我误解了你的问题,你就不会这样做:
// given
id sender;
if (sender == nil) {}
基本上,您使用id
来捕获可能分配给它的任何对象。所以你可以这样做:
id name = [NSString stringWithString:@"john"];
现在名称将是NSString
对象,您可以通过调用[name class]
进行验证。
有关详细信息,请查看this page的ID部分。