标题:
RunTime(3)
[打印本页]
作者:
look_w
时间:
2019-3-3 19:48
标题:
RunTime(3)
如果我们使用[p performSelector
selector(eat) withObject
1];带参数的,对应的写成下面这个样子的
void eat(id self,SEL _cmd,NSNumber *n){
NSLog(@"吃了%@",n);
}
+ (BOOL)resolveInstanceMethod
SEL)sel{
if ([NSStringFromSelector(sel) isEqualToString
"eat"]) {
class_addMethod([self class], sel, (IMP)eat, "v@
");
return YES;
}
return [super resolveInstanceMethod:sel];
}
动态添加属性
本质也就是类别中添加一个属性,
因为类别中只会set get 方法声明,不会实现,也不会生成对应的下划线成员变量.看看代码
@interface Person : NSObject
@property NSString *name;
@end
由于方法没有实现,所以给属性设置策略是无用的
- (void)setName
NSString *)name{
objc_setAssociatedObject(self, @"name", name, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (NSString *)name{
return objc_getAssociatedObject(self, @"name");
}
将该属性关联到Person对象上
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0