類目

category

類別的作用

  1. 為任何類添加新的方法,包括那些沒有源代碼的類,達到擴充類的功能;
  2. 將類的實現分散到多個不同文件或多個不同框架中;
  3. 使用類別創建前向引用:如果其他類中的方法未實現,在你訪問其他類的私有方法時編譯器報錯,這時使用類別,在類別中聲明這些方法(不必提供方法實現),編譯器就不會再產生警告;
  4. 向對象添加非正式協議(所謂的非正式協議就是類別,即凡是NSObject或其子類的類別,都是非正式協議)。

類別的局限性

  1. 無法向類中添加新的實例變量,類別沒有位置容納實例變量。
  2. 名稱沖突,即當類別中的方法與原始類方法名稱沖突時,類別具有更高的優先級。類別方法將完全取代初始方法從而無法再使用初始方法

補充

objc runtime 動態增加屬性
OBJC_EXPORT void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)
OBJC_EXPORT id objc_getAssociatedObject(id object, const void *key)


objc_setAssociatedObject
objc_setAssociatedObject(self, @selector(NoAutoSizing), @(NoAutoSizing), OBJC_ASSOCIATION_RETAIN);

方法總共四個參數,分別是綁定目標,關鍵字,綁定者,策略。
綁定目標,就是給誰綁定;
關鍵字就是給這個對象綁定一個屬性,要有一個標示符去表示那個屬性,調用這個屬性的時候通過標示符去尋找這個屬性;
綁定者,要為這個屬性綁定的值;
策略就是說綁定的這個屬性的引用機制。

objc_getAssociatedObject

兩個參數,一個綁定目標,一個關鍵字,通過關鍵字從綁定目標中獲取屬性的值。

舉例:

#import <UIKit/UIKit.h>

@interface UILabel (Associate)

- (void) setFlashColor:(UIColor *) flashColor;

- (UIColor *) getFlashColor;

@end


#import "UILabel+Associate.h"
#import <objc/runtime.h>

@implementation UILabel (Associate)

static char flashColorKey;

- (void) setFlashColor:(UIColor *) flashColor{
    objc_setAssociatedObject(self, &flashColorKey, flashColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

- (UIColor *) getFlashColor{
    return objc_getAssociatedObject(self,   &flashColorKey);
}

@end


UILabel *lab = [[UILabel alloc] init];
[lab setFlashColor:[UIColor redColor]];
NSLog(@"%@", [lab getFlashColor]);
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,915評論 18 139
  • 1.項目經驗 2.基礎問題 3.指南認識 4.解決思路 ios開發三大塊: 1.Oc基礎 2.CocoaTouch...
    陽光的大男孩兒閱讀 5,031評論 0 13
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,951評論 6 342
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,242評論 25 708
  • ·“蓉兒,蓉兒”。我喚了好久遲遲無人應答。不知這丫頭去了哪里。那燈盞里的燈油已經燃盡,可這悅仰宮里并不黑暗,今日本...
    李阿琪大姐姐呦閱讀 94評論 0 0