我正在研究字典的动态实现,该字典还支持使用@dynamic 关键字声明的属性(类似于 NSManagedObject)。
我可以在运行时判断是否使用@dynamic 声明了特定的选择器吗?这只是设计时工具的编译器技巧并在运行时丢失,还是有办法检查这个?
+ (BOOL) resolveInstanceMethod:(SEL)sel
{
NSString *method = NSStringFromSelector(sel);
// ideally I could also check here if the selector is @dynamic
if ([method hasPrefix:@"set"] && [method rangeOfString:@":"].location == method.length -1) {
class_addMethod([self class], sel, (IMP) dynamicSet, "v@:@");
return YES;
}
else if ([method hasPrefix:@"get"] && [method rangeOfString:@":"].location == method.length -1) {
class_addMethod([self class], sel, (IMP) dynamicGet, "v@:@");
return YES;
}
BOOL value = [super resolveInstanceMethod:sel];
return value;
}
另外,我的类是 NSDictionary 的子类,但是当为现有方法调用 [super resolveInstanceMethod:sel] 时它仍然返回 false?