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);
    }
  • 相关阅读:
    迭代器和生成器
    小练习函数
    python学习(函数)
    python学习(文件的操作)
    【Python基础】数据结构
    【Python基础】break 和 continue 语句, 以及循环中的 else 子句
    【Python算法】汉诺塔
    【Python基础】序列(字符串、列表、元组)
    【Python基础】正则表达式
    【Python练习】分类数据
  • 原文地址:https://www.cnblogs.com/wlsxmhz/p/5558906.html
Copyright © 2011-2022 走看看