91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

RunTime的使用-Category中增加實例變量

發布時間:2020-06-11 15:54:21 來源:網絡 閱讀:441 作者:卓行天下 欄目:開發技術

RunTime的使用-Category中增加實例變量

很久沒遇到問題了,今天寫類目的時候發現,在我們所創建的類目(Category)中 只能寫方法不能寫實例變量以及屬性,但是這無疑非常不方便,于是這里用到RunTime 這樣就能在類目中對屬性進行賦值了。
下面我們介紹一個很巧妙的方法來解決:使用runtime庫的
 objc_setAssociatedObject / objc_getAssociatedObject 函數來解決。
這里只用到RunTime的2個方法,還有其他的方法

通過這相中方法,明眼人可以看到有set 與 get 的關鍵字  也就是說一個是設置一個是取值  
通過這種方法來模擬生成屬性。

代碼:
在.h文件中正常的聲明一個屬性,不要太浮夸
@property (nonatomic,
retain)ZbarViewController *readerVC;

然后在.M中包含RunTime的頭文件
#import <objc/runtime.h>
然后這步驟非常重要 我們需要一個關聯的時候的Key來使用
,這個Key是用來存儲用的
//常規用來標注的Key 萬年不變三種寫法
1static void *strKey = &strKey;
2static NSString *strKey = @"strKey"
3static char strKey;
這里我用第三種
 
static char AddressKey; 


之后開始調用RunTime的方法
//設置值
- (void)setAlloc:(ZbarViewController *)zBar
{
    objc_setAssociatedObject(self, &AddressKey, zBar, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

objc_setAssociatedObject的方法,這個方法有四個參數,分別是:源對象(self),關聯時的用來標記是哪一個屬性的key(AddressKey)(因為你可能要添加很多屬性),關聯的對象(zBar)和一個關聯策略(我前面聲明屬性用的是retain 所以這里用的是retain)。 
關聯策略是一個枚舉值 

enum { 
OBJC_ASSO
CIATION_ASSIGN = 0//關聯對象的屬性是弱引用 
OBJC_ASSO
CIATION_RETAIN_NONATOMIC = 1//關聯對象的屬性是強引用并且關聯對象不使用原子性OBJC_ASSOCIATION_COPY_NONATOMIC = 3//關聯對象的屬性是copy并且關聯對象不使用原子性
OBJC_ASSOCIATION_RETAIN = 01401//關聯對象的屬性是copy并且關聯對象使用原子性 
OBJC_ASSO
CIATION_COPY = 01403 //關聯對象的屬性是copy并且關聯對象使用原子性};
 
//取值
- (ZbarViewController *)get
{
    return objc_getAssociatedObject(self, &AddressKey);
}

然后初始化的方法  跟取值的方法分別為
 [self setAlloc:[ZbarViewController new]];   //調用set
    [self get].readerDelegate = self;    //調用Get 
這樣就能在類目中使用屬性了。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

深泽县| 新乡市| 临泽县| 华坪县| 遂昌县| 无极县| 宝鸡市| 石渠县| 将乐县| 东海县| 古浪县| 博白县| 长乐市| 冕宁县| 东乌珠穆沁旗| 淮安市| 平果县| 五峰| 金寨县| 正安县| 鸡西市| 赫章县| 西林县| 措美县| 昂仁县| 博乐市| 马关县| 富民县| 秭归县| 鱼台县| 卓尼县| 巧家县| 永嘉县| 邯郸县| 简阳市| 内乡县| 黑龙江省| 徐汇区| 龙里县| 图们市| 顺平县|