zoukankan      html  css  js  c++  java
  • objc_setAssociatedObject 关联对象

    使用场景:在分类中,不允许创建实例变量,这里就解决了此问题

    参考: https://www.cnblogs.com/someonelikeyou/p/7162613.html

    属性的实质:就是实例变量+set+get 方法

    协议和分类中只会生成setter和getter的声明,如果要实现,还得借助runtime:

    
    
    void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy);
    
    id objc_getAssociatedObject(id object, const void *key); 
    
    void objc_removeAssociatedObjects(id object);
     
    key:要保证全局唯一,key与关联的对象是一一对应关系。必须全局唯一。通常用@selector(methodName)作为key。
    另外也可以用_cmd表示取当前方法
    另外用自定义key也行 static const char Key; 
    value:要关联的对象。
    policy:关联策略。有五种关联策略。
    OBJC_ASSOCIATION_ASSIGN 等价于 @property(assign)。
    OBJC_ASSOCIATION_RETAIN_NONATOMIC等价于 @property(strong, nonatomic)。
    OBJC_ASSOCIATION_COPY_NONATOMIC等价于@property(copy, nonatomic)。
    OBJC_ASSOCIATION_RETAIN等价于@property(strong,atomic)。
    OBJC_ASSOCIATION_COPY等价于@property(copy, atomic)。

     不需要做任何释放对象的事 

    此文仅为鄙人学习笔记之用,朋友你来了,如有不明白或者建议又或者想给我指点一二,请私信我。liuw_flexi@163.com/QQ群:582039935. 我的gitHub: (学习代码都在gitHub) https://github.com/nwgdegitHub/
  • 相关阅读:
    mysql权限
    Win7_64位使用Mysql Odbc
    二叉树的遍历
    Notepad++的使用
    mysql与mysqld
    Mysql 聚集函数和分组
    Linux 目录
    Linux 倒引号、单引号、双引号
    openkm安装过程
    rhel 7 设置默认运行级别为图形
  • 原文地址:https://www.cnblogs.com/liuw-flexi/p/8479976.html
Copyright © 2011-2022 走看看