美文网首页
runtime的三个常用方向

runtime的三个常用方向

作者: Trigger_o | 来源:发表于2018-01-05 11:36 被阅读0次

    一:对象绑定.

    引入

    @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的三个常用方向

          本文链接:https://www.haomeiwen.com/subject/qvijnxtx.html