• 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);
    }
  • 相关阅读:
    css中的元素旋转
    display:inlineblock的深入理解
    js时间获取。
    长英文自动换行的最终解决方法
    jqery图片展示效果
    链接A引发的思考
    电子邮件制作规范和建议
    overflow与textindent:9999px 字体隐藏及input value偏移
    jQuery load的详解
    转载:前端调试利器DebugBa
  • 原文地址:https://www.cnblogs.com/wlsxmhz/p/5558906.html
Copyright © 2020-2023  润新知