zoukankan      html  css  js  c++  java
  • 类别(category) 的作用 ? 通过rumtime给类别添加属性,

       类别(category) 可以在不获悉、不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除修改,并且如果类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别(category)具有更高的优先级。

     

       另外extensions的不同在于可以添加属性,添加的方法是必须要实现的;

      在正常的情况下,类别是不能添加属性的,但是可以通过rumtime添加一个伪属性,具体实现代码

    objc_AssociationPolicy的定义

    enum {

        OBJC_ASSOCIATION_ASSIGN = 0,

        OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1,

        OBJC_ASSOCIATION_COPY_NONATOMIC = 3,

        OBJC_ASSOCIATION_RETAIN = 01401,

        OBJC_ASSOCIATION_COPY = 01403

    };

    // textItem.h  文件中只有一个name的属性,通过rumtime给类别添加一个age属性。
    
    
    .h文件
    
    #import "textItem.h"
    #import <objc/runtime.h>
    
    @interface textItem (category)
    
    @property (nonatomic,copy) NSString *age;
    
    @end
    
    *********************
    .m文件
    
    #import "textItem+category.h"
    
    @implementation textItem (category)
    
    - (NSString *)age{
        return objc_getAssociatedObject(self, _cmd);
    }
    
    - (void)setAge:(NSString *)age{
        objc_setAssociatedObject(self, @selector(age), age, OBJC_ASSOCIATION_COPY_NONATOMIC);
        
    }
    @end ******************* 在VC中实现 - (void)viewDidLoad { [super viewDidLoad]; textItem *item = [[textItem alloc]init]; item.name = @"张三h"; item.age = @"123"; NSLog(@"%@ %@",item.name,item.age); }
  • 相关阅读:
    frida
    ES中filter 和map的使用
    阿里巴巴15 款开发者工具
    小程序的开发记录
    微信3.1小程序商城源码C# ASP.NET 多用户微商城 saas模式
    js中for,for in,forEach,for of的使用
    Vuejs学习笔记
    vue.js/element-ui/webpack 开发记录
    ESXi开启虚拟化
    shell把字符串中的字母去掉,只保留数字
  • 原文地址:https://www.cnblogs.com/weipeng168/p/7839573.html
Copyright © 2011-2022 走看看