玩轉iOS開發 裝逼技術RunTime的應用 三

2021-09-11 09:26:08 字數 2039 閱讀 7618

文章分享至我的個人技術部落格:

在上一章節裡曉得了怎麼在category裡關聯物件, 以及利用runtime轉換模型的時候預防了三種轉換時的情況, 如果沒有去看的朋友可以到玩轉ios開發:裝逼技術runtime的應用(二)看看.

在以前我們在使用歸檔的時候都會有乙個煩惱, 就是寫的太多, 不信? 我們來宣告乙個物件:

#import 

@inte***ce

runtimecodermodel : nsobject

@property (nonatomic, copy) nsstring *cl_name;

@property (nonatomic, copy) nsstring *cl_height;

@property (nonatomic, copy) nsstring *cl_age;

@end

複製**

常規歸檔的寫法:

- (void)encodewithcoder:(nscoder *)acoder 

複製**

常規解檔的寫法:

- (instancetype)initwithcoder:(nscoder *)adecoder 

return

self;

}複製**

現在看著好像也不怎麼樣, 但在實際開發中, 我們要寫的屬性可不是只有這三個, 如果遇到**的, 有上百個那怎麼辦呢?

逐個逐個去寫麼? 萬一寫完之後突然要改屬性怎麼辦? 逐個去改? 這樣子就會大量的浪費我們的時間, 這是不明智的寫法.

回想一下, 每個類都有乙個isa的結構體指標, 裡面可以拿到所有的每個類的資訊, 那我們是否可以通過這個特性, 來給歸檔解檔操作一番呢? 試試看:

runtime歸檔的寫法:

- (void)cl_runtimeencoderwithcoder:(nscoder *)coder 

free(ivarlist);

}複製**

runtime解檔寫法:

- (void)cl_runtimedecidewithcoder:(nscoder *)decoder 

free(ivarlist);

}複製**

最終的使用:

- (void)encodewithcoder:(nscoder *)acoder 

- (instancetype)initwithcoder:(nscoder *)adecoder

return

self;

}複製**

最終的效果:

這的確是可行的, 這樣子我們就把這個寫成乙個通用的類, 並且遵守協議, 就可以把所有繼承與nsobject的類全部一次性歸檔.

在這裡我就不對歸檔和解檔的方法進行封裝了, 都寫在runtimecodercontroller這個控制器上, 有想法的朋友可以自行進行封裝, 這樣子就可以抽成乙個通用類.

前段時間搜了一下關於runtime的一些部落格, 發現有很多人都說runtime黑魔法, 那什麼是黑魔法?

除了我們在演示裡寫過的**, 在實際上又是怎麼運用呢? 這裡收集到了幾種場景:

**這裡就不寫了, 想詳細了解的朋友可以到下面的文章去了解.

runtime method swizzling開發例項彙總

runtime 完整總結

objc_msgsend

runtime詳解

讓你快速上手runtime

利用runtime 實現自動化歸檔

runtime那些事(訊息機制)

oc最實用的runtime總結,面試、工作你看我就足夠了!

runtime在實際開發中的應用

碼字很費腦, 看官賞點飯錢可好

玩轉iOS開發 裝逼技術RunTime的總結篇

文章分享至我的個人技術部落格 講到這裡,runtime的知識點和應用基本上就已經講完了,剩下的就靠大家自己在專案中的應用以及累積了.這一篇文章主要是 基礎路徑圖 在學習runtime的基礎時,我們要搞清楚一些重要的東西,一些專業術語 我們可以從這些東西裡獲取到指定類的所有資訊,無論是公開的,還是私有...

玩轉iOS開發 NSURLSession講解 三

文章分享至我的個人技術部落格 雖然前面兩講都是說了nsurlsession的一些理論上的知識,但我們現在起碼對nsurlsession有個大概的了解,並不會像一開始的那樣,一臉懵逼的看著,這個請求是什麼鬼,那個方法是什麼鬼,task是什麼東西,如果沒有去看的朋友們可以去看看前面兩講玩轉ios開發 n...

玩轉iOS開發 iOS中的Socket程式設計 一

文章分享至我的個人技術部落格 socket翻譯過來中文稱為套接字,這裡我找到了一段比較官方的解釋socket是什麼東西 socket是通訊的基石,是支援tcp ip協議的網路通訊的基本操作單元,包含進行網路通訊必須的五種資訊 連線使用的協議,本地主機的ip位址,本地程序的協議埠,遠地主機的ip位址,...