id动态类型文档

时间:2011-09-12 00:06:44

标签: objective-c

有人能指出我特定的“id类型文档”吗?我一直在浏览动态类型文档,但我想知道如何使用类型ID。具体如何检查id是否为null。

4 个答案:

答案 0 :(得分:3)

id类型与Objective-C语言本身直接相关,而不是原始标签所暗示的Cocoa / Cocoa Touch框架。也没有涉及动态类型。 Here's a little introduction in Apple's docs.

要回答您的具体问题,请参阅以上链接:

  

关键字nil被定义为空对象,id的值为0idnil以及其他基本类型的Objective-C在头文件objc/objc.h中定义。

nilNULL是等价的(零指针),因此可以互换。

在基本的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部分。