美文网首页
关于Runtime的一点个人理解

关于Runtime的一点个人理解

作者: 小枫0804 | 来源:发表于2017-03-07 10:34 被阅读0次

    对象方法:类对象的方法列表      类方法:元类中方法列表

    1.通过isa去对应的类中查找

    2.注册方法编号

    3.根据方法编号去查找对应方法

    4.找到只是最终函数实现地址,根据地址去方法区调用对应函数

    一、 交换方法

    首先需要导入 #import<objc/message.h>

    .h文件

    @interfaceUIImage (YBF)

    + (UIImage*)YBF_imageNamed:(NSString*)name;

    @end

    .m 文件

    @implementationUIImage (YBF)

    + (void)load {

    MethodimageNameMethod =class_getClassMethod(self,@selector(imageNamed:));

    MethodYbfImageNameMedhod =class_getClassMethod(self,@selector(YBF_imageNamed:));

    method_exchangeImplementations(YbfImageNameMedhod, imageNameMethod);

    }

    + (UIImage*)YBF_imageNamed:(NSString*)name {

    UIImage*image = [UIImageYBF_imageNamed:name];  // 这里需要调用方法的本身,因为前面已经交换方法了,所以这里实际调用的是系统的imageNamed:方法

    if(image) {

    NSLog(@"成功");

    }else{

    NSLog(@"失败");

    }

    returnimage;

    }

    @end

    二、添加属性

    .h 文件

    @interfaceNSObject (YBF)

    @propertyNSString*name;

    @end

    .m 文件

    @implementationNSObject (YBF)

    - (void)setName:(NSString*)name {

    objc_setAssociatedObject(self,@"name", name,OBJC_ASSOCIATION_RETAIN_NONATOMIC);

    }

    - (NSString*)name {

    returnobjc_getAssociatedObject(self,@"name");

    }

    @end

    相关文章

      网友评论

          本文标题:关于Runtime的一点个人理解

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