是否可以检查并获取对象初始化的类的名称?
示例:我有A类。我通过实例方法使用[[ABOBject alloc] init];
创建了对象ABObject。
如何找到创建实例ABObject的类,即“A”?
答案 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.在评论中指出的那样,我正在使用快捷方式并传递一个字符串文字作为函数的关键参数,实际上你想要遵循使用某些地址的做法静态或全局变量。