美文网首页恩美第二个APP项目将来跳槽用
ios 利用runtime给分类动态添加属性

ios 利用runtime给分类动态添加属性

作者: fulen | 来源:发表于2016-09-27 13:35 被阅读127次

    1、分类默认是不能添加属性的,这里我们用runtime实现给分类添加属性,本例给UIView添加一个string属性,分类中.h代码如下

    
    #import <UIKit/UIKit.h>
    
    @interface UIView (String)
    
    @property (nonatomic ,copy) NSString *testStr;
    
    // set和get方法系统会自动生成,这里可以不用写
    //- (void)setTestStr:(NSString *)testStr;
    //
    //- (NSString *)testStr;
    
    @end
    

    2、 .m中,如果直接添加属性会报错,如下

    003DXx0qzy75aBUHjyi22.jpeg

    所以此时借助runtime,实现动态添加属性,代码如下

    
    
    #import "UIView+String.h"
    #import <objc/runtime.h>
    
    @implementation UIView (String)
    
    static char overview;
    
    - (void)setTestStr:(NSString *)testStr
    {
        objc_setAssociatedObject(self, &overview, testStr, OBJC_ASSOCIATION_COPY);
    //    OBJC_ASSOCIATION_ASSIGN = 0, //关联对象的属性是弱引用
    //    OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1, //关联对象的属性是强引用并且关联对象不使用原子性
    //    OBJC_ASSOCIATION_COPY_NONATOMIC = 3, //关联对象的属性是copy并且关联对象不使用原子
    //    OBJC_ASSOCIATION_RETAIN = 01401, //关联对象的属性是copy并且关联对象使用原子性
    //    OBJC_ASSOCIATION_COPY = 01403 //关联对象的属性是copy并且关联对象使用原子性
    }
    
    - (NSString *)testStr
    {
        return objc_getAssociatedObject(self, &overview);
    }
    
    @end
    

    3、 在其他控制器中的使用,代码如下

    
    
    #import "ViewController.h"
    #import "UIView+String.h"
    
    @interface ViewController ()
    {
        NSString *viewControllerStr;
    }
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        UIView *view = [[UIView alloc] init];
        view.testStr = @"nihao";
        
        viewControllerStr = view.testStr;
        [self assignment];
    }
    
    - (void)assignment
    {
        NSLog(@"%@",viewControllerStr);
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    @end
    

    相关文章

      网友评论

        本文标题:ios 利用runtime给分类动态添加属性

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