美文网首页
给类别添加属性

给类别添加属性

作者: redye | 来源:发表于2016-01-29 17:59 被阅读473次

类别

对于 iOS 开发者来说,对于类别肯定不陌生,在 OC 的API 中有很多的类都有自己的类别,既然如此,那么类别有哪些优点呢?

  1. 对现有类功能进行扩展;
  2. 分散类的实现;
  3. 对类中的方法归类,方便查阅、更新和维护;

该类别添加方法

这个就不用多说了,是个人都会。

给类别添加属性

在我们学习 OC 的时候,一般都是说是不能给类别添加属性的(这种太绝对的说法你相信吗),那么到底能不能给类别添加方法呢?答案当然是肯定的,就是能给类别添加属性。

给类别添加属性有两种情况下是可以的:

  1. 给类别添加只读属性,同时实现 getter 方法。
    @property (nonatomic, readonly) NSUInteger count;
    - (NSUInteger)count {
    return self.length;
    }

  2. 使用 OC 的运行时关联特性,实现 settergetter 方法。
    @property (nonatomic, strong) NSString *name;
    NSString * const kName = @"Name";
    - (void)setName:(NSString *)name {
    objc_setAssociatedObject(self, (__bridge const void *)(kName), name, OBJC_ASSOCIATION_COPY);
    }

     - (NSString *)name {
         return objc_getAssociatedObject(self, (__bridge const void *)(kName));
     } 
    

对于这里设置的属性 policy,对应设置属性时的 strongcopyassignnonatomic
typedef OBJC_ENUM(uintptr_t, objc_AssociationPolicy) {
OBJC_ASSOCIATION_ASSIGN = 0, /< Specifies a weak reference to the associated object. /
OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1, /
< Specifies a strong reference to the associated object.
* The association is not made atomically. /
OBJC_ASSOCIATION_COPY_NONATOMIC = 3, /
< Specifies that the associated object is copied.
* The association is not made atomically. /
OBJC_ASSOCIATION_RETAIN = 01401, /
< Specifies a strong reference to the associated object.
* The association is made atomically. /
OBJC_ASSOCIATION_COPY = 01403 /
< Specifies that the associated object is copied.
* The association is made atomically. */
};

Demo

Demo 请戳 这里

相关文章

网友评论

      本文标题:给类别添加属性

      本文链接:https://www.haomeiwen.com/subject/famjkttx.html