一:对象绑定.
引入
@importObjectiveC.runtime;
设置绑定 str是目标对象 ”aaa”是key,这里需要的参数是地址,sender是绑定的对象,最后一个是策略 有ASSAIN RETAIN COPY 对应绑定的数据类型
objc_setAssociatedObject(str, &"aaa",sender ,OBJC_ASSOCIATION_RETAIN_NONATOMIC);
取出绑定的对象
UIButton*btn =objc_getAssociatedObject(sender, &"aaa”);
二:添加属性.
1.添加分类
#import"MyClass.h"
@interfaceMyClass (TestAddProperty)
@property(nonatomic,copy)NSString*name;
-(void)setName:(NSString*)name;
-(NSString*)getName;
@end
#import"MyClass+TestAddProperty.h"
@importObjectiveC.runtime;
staticconstvoid*nameKey ="nameKey";
@implementationMyClass (TestAddProperty)
@dynamicname;//dynamic修饰添加的属性
-(void)setName:(NSString*)name{
objc_setAssociatedObject(self,nameKey, name,OBJC_ASSOCIATION_COPY_NONATOMIC);
}
-(NSString*)getName{
returnobjc_getAssociatedObject(self,nameKey);
}
@end
2.使用//此时点语法是不可用的 没有系统的setter getter
MyClass*myc = [[MyClassalloc]init];
[mycsetName:@"aaa"];
NSLog(@"%@",[mycgetName]);
三:交换方法.
重写load方法
+(void)load{
SELf1 =@selector(func1);
SELf2 =@selector(func2);
Methodm1 =class_getInstanceMethod([selfclass], f1);
Methodm2 =class_getInstanceMethod([selfclass], f2);
method_exchangeImplementations(m1, m2);
}