iOS 訪問第三方私有屬性的技巧

一、簡介

在使用第三方 SDK 的情況下,難免也需要在其基礎(chǔ)上做一些調(diào)整,有的時(shí)候需要修改其私有的屬性。這種情況應(yīng)該怎么處理呢?

一個(gè)場景模擬: 在一個(gè) SDK 中,有一個(gè) Class 是 HGObject,有一個(gè)私有屬性是 name。現(xiàn)在想要操作這個(gè) name。

二、具體的方案

具體的方案有兩種:

  • 1、使用 KVC
  • 2、使用分類

接下來分別介紹一下。

2.1 使用 KVC

這個(gè)方案,應(yīng)該是很多人使用的,代碼類似于這樣的:

{ // 通過 KVC 訪問私有屬性
        HGObject* obj = [[HGObject alloc] init];
        
        // KVC 設(shè)置值
        [obj setValue:@"KVC_Value" forKey:@"name"];
        // 通過 KVC 獲取值
        NSString* value = [obj valueForKey:@"name"];
        NSLog(@"通過 KVC 獲取的值是 : %@", value);
    }

這種方式,在使用上很簡單,畢竟 KVC 是 OC 的固有特性。

2.2 使用分類

直接創(chuàng)建一個(gè)分類,然后重新再分類中申明一個(gè)同樣的屬性。然后在使用的時(shí)候與公開的屬性一致。代碼類似于這樣:

{ // 通過分類操作私有屬性
        HGObject* obj = [[HGObject alloc] init];
        obj.name = @"Category_Value";
        
        NSLog(@"通過分類操作私有屬性 = %@", obj.name);
    }

三、特別提醒

一旦由于 SDK 的升級在內(nèi)部將私有屬性刪除,那么兩種方案均會閃退。所以每次 SDK 升級之后一定要做好復(fù)查。為了避免閃退,每次調(diào)用都應(yīng)該使用 respondsToSelector: 。具體可以參考我的代碼:OC2Nature項(xiàng)目中 HGPrivate 目錄
有更多更好的方案, 歡迎討論!

我的更多文章,可以直接看這里NewStart NewStart NewStart

謝謝!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時(shí)...
    歐辰_OSR閱讀 30,214評論 8 265
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,893評論 25 709
  • 此為臨時(shí)鏈接,僅用于文章預(yù)覽,將在短期內(nèi)失效關(guān)閉 雜文 | 你信什么嗎? 2016-10-17云海 新意 傳 ● ...
    新意云海閱讀 540評論 0 0
  • 陰差陽錯(cuò)的給黃小寶買了一個(gè)禮物,是一個(gè)青蛙布偶,而此時(shí)的心情像極了我一貫做事的風(fēng)格,光說不練,一旦練了,發(fā)現(xiàn)...
    木兮日記閱讀 231評論 1 2
  • 整整兩個(gè)禮拜,我在用不同的載體,在每一個(gè)允許的時(shí)間段里,和父母進(jìn)行著溝通,而這次的溝通,無論從哪個(gè)角度和層次看,都...
    散步的兔子閱讀 229評論 0 0

友情鏈接更多精彩內(nèi)容