如何检查在Objective C中初始化的对象是什么类

时间:2013-03-17 13:47:25

标签: iphone ios objective-c xcode nsobject

是否可以检查并获取对象初始化的类的名称?

示例:我有A类。我通过实例方法使用[[ABOBject alloc] init];创建了对象ABObject。

如何找到创建实例ABObject的类,即“A”?

1 个答案:

答案 0 :(得分:2)

可以在类的上下文之外创建对象,因此将其作为内置语言功能是没有意义的。

如果你必须这样做,解决它的一种方法是在实例化任何此类对象后立即使用objc_setAssociatedObjects()中的objc/runtime.h函数。类似的东西:

ABObject *object = [[ABObject alloc] init];
objc_setAssociatedObject(object, @"InstantiatingClassKey", [self class], OBJC_ASSOCIATION_ASSIGN);

然后你可以用objc_getAssociatedObject(object, @"InstantiatingClassKey")获得它。

我认为你最好不要重新评估你的设计,因为这不会特别易于维护。即使将其提取到NSObject上的类别中以删除重复的代码,您仍然需要额外的步骤来记住对象之间的奇怪关系。

另外,正如Martin R.在评论中指出的那样,我正在使用快捷方式并传递一个字符串文字作为函数的关键参数,实际上你想要遵循使用某些地址的做法静态或全局变量。