id< ...>是什么在Objective-C中意味着什么?

时间:2013-11-06 12:47:12

标签: ios objective-c

我正在尝试在iOS应用程序中使用Google Analytics,我看到了这部分代码:

id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];

作为iOS开发的初学者,我不知道id<GAITracker> trackerGAITracker *tracker之间的区别。我在谷歌搜索过它,但没有找到解释。有人可以为我澄清一下吗?

5 个答案:

答案 0 :(得分:19)

&lt;&gt;表示该对象符合方括号内的协议(pr协议)。

在您的示例中,对象tracker可以是任何类型的对象,但它符合GAITracker协议。

因此,虽然它没有特定的类,但您仍然可以调用该协议声明的方法和属性。

答案 1 :(得分:1)

<强> ID

id可以容纳任何类型的对象。

<强> id<GAITracker> tracker

这意味着跟踪器是一个id类型对象,它可以保存那些确认为GAITracker协议的对象

答案 2 :(得分:1)

当你使用“id”时它就像void *,你知道它是一个指针,但你不知道它的类型。 当你使用时,你的意思是该对象确实实现了MyProtocol。你不知道对象的类型,它可以是NSObject,UIViewController,你不在乎。您只希望该对象实现一组协议。 最后,GAITracker意味着对象的类型是GAITracker。

答案 3 :(得分:1)

此处 id 是一个包含对象的指针。

跟踪器是符合GAITracker协议的实例。

Protocols make it possible for two classes distantly related by inheritance to communicate with each other to accomplish a certain goal. They thus offer an alternative to subclassing.

答案 4 :(得分:1)

1.ID类型被设计为可以保存任何对象类型的泛型类型(换句话说,id不适用于基本类型,例如int和BOOL)。

2.想象你有一个处理一些外部数据的类。您不知道或不关心数据来自何处,但您应该准备好处理许多不同类型。您的数据可能来自文本文件,其中的内容可能会被读取并作为NSString传递给您的方法。您可能必须在自己的程序中处理其他位置的数据,然后数据将作为NSArray或NSSet。或者,数据可能来自互联网作为JSON响应,必须将其解析为NSDictionary(如果您不知道JSON是什么,请不要担心......稍后会有一些关于此的内容)。

- (void)processData:(id)someData {

    if ([someData isKindOfClass:[NSString class]])
        NSLog(@"input data is %@", someData);

    else if ([someData isKindOfClass:[NSArray class]]) {
        // Cast someData into an NSArray
        NSArray *dataArray = (NSArray *)someData;
        NSLog(@"First object in dataArray is %@", [dataArray objectAtIndex:0]);
    }

    else if ([someData isKindOfClass:[NSDictionary class]]) {
        // Cast someData into an NSDictionary
        NSDictionary *dataDict = (NSDictionary *)someData;
        NSLog(@"Keys in dataDict are %@", [dataDict allKeys]);
    }

    else if ([someData isKindOfClass:[NSData class]])
        NSLog(@"someData is a bag of bits.");

    else
        NSLog(@"someData is an unsupported type:\n%@", someData);
}

您可以在此链接上获得更多详细信息 http://www.binpress.com/tutorial/learn-objectivec-objects-part-8-dynamic-typing/68