在 Objective-C 中,是否可以限制id
为几种类型?我想写一个有id
参数的方法,但是这个方法只适用于某些 ObjC 类型:使用id
可能会导致运行时错误。是否有任何 LLVM 约定或类似的东西?
问问题
167 次
3 回答
1
只要你在处理对象,你就可以要求它的类:
id anId;
if ([anId isKindOfClass:[NSNumber class]]) {
...
}
于 2012-10-30T11:01:06.953 回答
1
id
是一个通用的Objective-C 对象指针,即它表示任何对象。
您可以限制类型的唯一方法是使用协议:
id <myProtocol>
因此,通过这种方式,您指向任何采用该myProtocol
协议的对象。
于 2012-10-30T10:59:56.093 回答
1
“限制”id
不是 Objective-C 的东西。无论如何,如果你传递一个类型与方法声明中指定的类型不匹配的对象,你只会得到一个警告而不是编译器错误(除非你编译 using -Werror
),所以编译器不能真正阻止你从这样做。
是的,这很容易出现运行时错误,但这就是 Objective-C 的工作方式。您应该做的一件事是记录接受哪些类型。
您可以做的一件事是在运行时检查类型,可以使用 的isKindOfClass:
或isMemeberOfClass:
方法NSObject
。此外,如果对象应该响应一组公共消息,您可以将它们包装到协议中并要求类型的表达式id <MyProtocol>
。
于 2012-10-30T11:03:35.310 回答