[self class] は呼び出されたメソッドのインスタンスの Class を返しますが、メソッドが定義されている Class を取得する方法はありますか? クラス B が A を拡張し、b が B のインスタンスであるとします。b から呼び出された場合でも、B ではなく A を返す A のメソッドが必要です。
編集:
-(void)releaseProperties メソッドを持つ NSObject カテゴリを作成しようとしています。このメソッドは、そのクラスで定義されているすべてのプロパティを取得し、読み取り専用ではないオブジェクト プロパティに対して nil を設定します。
- (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 メソッドで使用したいのですが、class_copyPropertyList([self class], &c) はそのスーパークラスで定義されたプロパティを返さないため、スーパー dealloc チェーンがうまく機能しません。そこで、[self class] を渡す代わりに、特定の dealloc メソッドが呼び出されているクラスを渡したいと思いました。