Extension给已有类添加属性③

给PHAsset类扩展一个 sizeString 的存储属性

import Foundation
import Photos

extension PHAsset{
    
    private struct AssociatedKeys{
        static var sizeString : String?
    }
    
    var sizeString : String? {
        get {
            //根据关键字返回给定对象的值
            return objc_getAssociatedObject(self, &AssociatedKeys.sizeString) as? String
        }
        set {
            if let newValue = newValue  { 
                //设置给定对象的值为 newValue  
                objc_setAssociatedObject(self, &AssociatedKeys.sizeString, newValue as String?, objc_AssociationPolicy.OBJC_ASSOCIATION_COPY_NONATOMIC)
            }
        }
    }
    
}

*** objc_setAssociatedObject 的四个参数:源对象,关键字,关联的对象 (newValue也就是你设置的值) 和一个关联策略(要深究的话点进去看官方注释)***

***关于 objc_AssociationPolicy,它是一个枚举:***

OBJC_ASSOCIATION_ASSIGN  等价  @property(assign)

OBJC_ASSOCIATION_RETAIN_NONATOMIC  等价  @property(nonatomic,strong)  
    
OBJC_ASSOCIATION_COPY_NONATOMIC  等价  @property(nonatomic,copy)
    
OBJC_ASSOCIATION_RETAIN  等价  @property(atomic,strong)
    
OBJC_ASSOCIATION_COPY  等价  @property(atomic,copy)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,842评论 0 9
  • 前言 日常开发中,为一个已有的类(比如说不想影响其文件结构)、第三方库提供的类增加几个property,已经是十分...
    软件iOS开发阅读 4,474评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,463评论 19 139
  • 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的...
    西木阅读 30,712评论 33 466
  • 我们知道,在 Objective-C 中可以通过 Category 给一个现有的类添加属性,但是却不能添加实例变量...
    iloveyou6415阅读 4,177评论 0 5