0

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

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

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

4

1 回答 1

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. 在评论中指出的那样,我正在采用快捷方式并将字符串文字作为函数的关键参数传递,实际上您希望遵循使用某些静态或全局地址的做法多变的。

于 2013-03-17T14:06:54.290 回答