我正在阅读“Objective C 编程”一书,他对id
类型的解释不多,也没有做太多练习,所以我想知道你多久使用id
一次,程序员是否大部分时间都避免使用它? (因为他解释了一些问题)
我确定它已被使用,如果您能提及某些情况,那就太好了,它是唯一的解决方案……就像来自某种应用程序开发的现实生活中的编程案例一样。
我正在阅读“Objective C 编程”一书,他对id
类型的解释不多,也没有做太多练习,所以我想知道你多久使用id
一次,程序员是否大部分时间都避免使用它? (因为他解释了一些问题)
我确定它已被使用,如果您能提及某些情况,那就太好了,它是唯一的解决方案……就像来自某种应用程序开发的现实生活中的编程案例一样。
id
是 Objective C 中的通用类型。它可以表示*
任何 Objective-C 类型的 a,例如NSString *
,NSArray *
等。Objective-C 的巧妙之处在于你可以向 发送消息id
,如果另一端的对象理解消息,它将像往常一样被处理,而发件人不必知道真实的类型。
它通常在定义任何泛型时使用。例如,NSArray
是一个id
s 的数组;由程序员将特定类型的对象放入容器中(例如NSNumber
、NSString
等)。它在 Objective-C 中的许多其他地方都使用过(例如在IBAction
为接口构建器定义 s 时,在定义init
方法时等)。
这id
有点像一个包罗万象的数据类型。它用于保存任何类型的值。
常见用途是用于init...
方法的返回类型。集合类使用它,因为它们可以容纳任何对象。请参阅各种 getter 方法返回值以及在可变版本的集合类中添加/设置对象的各种方法。
当您需要对可以是任何类但必须遵守协议的对象的引用时,它也可以与协议结合使用。示例包括许多委托属性,例如UITableView
delegate
.
id 是 Objective-C 中的通用对象类型。它可以容纳任何物体。
一个现实世界的例子:解析你不知道的 json,如果根元素是数组或字典。但 id 会带他们两个。
我经常使用它,但经常与协议定义结合使用:id<NetworkPrinterProtocol>
. 这意味着它应该是任何类型的对象,但它确实满足 NetworkPrinterProtocol。通常用于定义委托。