How to get the class that the method is defined, not that of the instance that the method is called?
[self class]返回被调用方法的实例的类,但是否有方法获取定义该方法的类?假设类B扩展了A,而B是B的一个实例,我希望A中有一个方法返回A而不是B,即使从B调用它也是如此。
编辑:
我试图创建一个nsObject类别,该类别具有-(void)releaseProperties方法,该方法获取该类中定义的所有属性,并为非只读对象属性设置nil。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | - (void)releaseProperties { unsigned int c = 0; objc_property_t *properties = class_copyPropertyList([self class], &c); for(unsigned int i = 0; i < c; i++) { objc_property_t property = properties[i]; NSString *propertyName = [NSString stringWithUTF8String:property_getName(property)]; NSString *propertyType = [NSString stringWithUTF8String:property_getAttributes(property)]; if([propertyType hasPrefix:@"T@"] // is an object && [propertyType rangeOfString:@",R,"].location == NSNotFound // not readonly ) { [self setValue:nil forKey:propertyName]; NSLog(@"%@.%@ = %@", NSStringFromClass(cls), propertyName, [self valueForKey:propertyName]); } } free(properties); } |
我想在dealloc方法中使用此方法,但是类的copyPropertyList([self class],&c)不会返回在其超类中定义的属性,因此超级dealloc链不能正常工作。因此,我不想传递[自类],而是要传递正在调用特定dealoc方法的类。
我不认为有直接的方法可以做到这一点,但是您可以使用当前类调用
编辑:对不起,我可能误解了这个问题。如果您在层次结构中查找定义具有该签名的方法的第一个超类,那么您只需遍历调用
例如,类
我觉得
如果你在B中调用"EDCOX1×1"(在你想调用的任何东西中填空),你将调用一个在A中生存的方法。
类A只能提供如下方法:
1 2 3 4 | - (Class) classA { return [A class]; } |
这是不可归纳的,但你的问题坚持一个不可归纳的答案。
这是一件很奇怪的事情。这表明你的设计有问题。我可以问你为什么要吗?你想解决什么问题?