zoukankan      html  css  js  c++  java
  • runtime

    category和associative作为objective-c的扩展机制的两个特性,category用来扩展类的方法,associative可以用来扩展类的属性。使用associative需要导入<objc/runtime.h>文件。

    他有三个方法
    1.设置关联对象 objc_setAssociatedObject

    OBJC_EXPORT void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)

    参数:object:源对象
    key:关键字
    value:关联对象
    policy:关联侧率

    2.获取关联对象 objc_getAssociatedObject

    OBJC_EXPORT id objc_getAssociatedObject(id object, const void *key)

    参数:object:源对象
    key:关键字

    3.断开关联 objc_removeAssociatedObjects

    OBJC_EXPORT void objc_removeAssociatedObjects(id object)

    参数:object:源对象

    该方法会断开所有的关联,只有在需要把对象恢复到原始状态的时候才会使用这个函数。

    下面以SDWebImage中的方法作为参考例子:

    static char imageURLKey;
    @implementation UIImageView (WebCache)
    
    设置关联:
    - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock {
        //设置关联
        objc_setAssociatedObject(self, &imageURLKey, url, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    
    }
    
    //获取关联对象
    - (NSURL *)sd_imageURL {
        return objc_getAssociatedObject(self, &imageURLKey);
    }
  • 相关阅读:
    搜狗拼音输入法候选框有时会跑到屏幕的左上角
    力扣 94. 二叉树的中序遍历
    让我们了解 Ceph 分布式存储
    HDFS的架构和设计要点
    业级PPTP服务器搭建企
    FastCGI中fastcgi_param 详细说明
    LAMP两种模式
    CentOS 7.4搭建LAMP,LAMP:Linux、Apache、MySQL、PHP
    centos7 7.3php编译安装
    Linux下编译安装MariaDB
  • 原文地址:https://www.cnblogs.com/wlsxmhz/p/5558906.html
Copyright © 2011-2022 走看看