是否经常使用`id`类型编写Objective C程序?

时间:2013-02-17 04:11:45

标签: objective-c

我正在阅读“在目标C中编程”一书,他对id类型的解释并不多,并没有对它进行过多的练习,所以我想知道你多久使用{ {1}}如果程序员大部分时间都避免它? (因为他解释了一些问题)

我确信它已被使用,如果您能提及某些情况下它是唯一的解决方案会很棒。就像来自某种应用程序开发的真实编程案例一样。

3 个答案:

答案 0 :(得分:4)

id是Objective C中的通用类型。它可以表示任何Objective-C类型的*,例如NSString *NSArray *等。关于Objective-C的事情是你可以向id发送消息,如果另一端的对象理解了消息,它将照常处理而不需要发送者必须知道真实的类型

在定义任何泛型时通常使用它。例如,NSArrayid s的数组;程序员可以在容器中放置特定类型的对象(例如NSNumberNSString等)。它在Objective-C中的许多其他地方使用(例如在为接口构建器定义IBAction时,在定义init方法等时)。

答案 1 :(得分:2)

id有点像一个包罗万象的数据类型。它用于保存任何类型的值。

常用用于init...方法的返回类型。它由集合类使用,因为它们可以容纳任何对象。请参阅各种getter方法返回值以及在可变版本的集合类中添加/设置对象的各种方法。

当您需要对可以是任何类但必须遵守协议的对象的引用时,它也与协议结合使用。示例包括许多委托属性,例如UITableView delegate

答案 2 :(得分:2)

id是Objective-C中的通用对象类型。它可以容纳任何物体。

一个现实世界的例子:解析json你不会知道,如果根元素是数组或字典。但是id会把它们都带走。

我经常使用它,但通常与协议定义结合使用:id<NetworkPrinterProtocol>。这意味着它应该是任何类型的对象,但它确实满足NetworkPrinterProtocol。通常用于定义代表。

请参阅WP: Objective-C — Dynamic Typing