類別
對于 iOS 開發(fā)者來說,對于類別肯定不陌生熔掺,在 OC 的API 中有很多的類都有自己的類別,既然如此非剃,那么類別有哪些優(yōu)點呢?
- 對現(xiàn)有類功能進行擴展推沸;
- 分散類的實現(xiàn)备绽;
- 對類中的方法歸類,方便查閱鬓催、更新和維護肺素;
該類別添加方法
這個就不用多說了,是個人都會宇驾。
給類別添加屬性
在我們學(xué)習(xí) OC 的時候倍靡,一般都是說是不能給類別添加屬性的(這種太絕對的說法你相信嗎),那么到底能不能給類別添加方法呢课舍?答案當(dāng)然是肯定的塌西,就是能給類別添加屬性。
給類別添加屬性有兩種情況下是可以的:
給類別添加只讀屬性筝尾,同時實現(xiàn)
getter
方法捡需。
@property (nonatomic, readonly) NSUInteger count;
- (NSUInteger)count {
return self.length;
}-
使用 OC 的運行時關(guān)聯(lián)特性,實現(xiàn)
setter
和getter
方法筹淫。
@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)); }
對于這里設(shè)置的屬性 policy站辉,對應(yīng)設(shè)置屬性時的 strong
、copy
损姜、assign
饰剥、nonatomic
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 請戳 這里