runtime的三个常用方向

一:对象绑定.

引入

@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);

}

你可能感兴趣的:(runtime的三个常用方向)