文章分享至我的個人技術部落格:
在上一章節裡曉得了怎麼在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位址,...