智勇播客:
上一篇文章中,跟大家講解過runtime的幾個入門級方法的使用。但大家肯定會有一個疑問就是,雖然知道了這些方法的使用,但這些方法應該在哪里用?什么時候用?
這篇文章中,就跟大家來一個實戰(zhàn)項目,在真實項目中,運用上這些方法。
對于我個人而言,runtime的使用,大多數(shù)都是用于修改類的方法、增加類的屬性成員,特別是對于系統(tǒng)的類。在系統(tǒng)原生類的基礎上,利用進行時來修改方法、添加屬性成員會比你繼承這個類,效率要快的多,而且實用性也要高的多。
為什么說對于實用性來說要高呢?因為對于系統(tǒng)類來說,你能看到他的方法、屬性成員,往往只是表面的。但這絕對不是這個類的所有方法、屬性成員。你可以當做還有一些隱性的方法、屬性成員,你在編譯時,是看不到的。只有代碼運行起來后,才能看到。
這也是能體現(xiàn)出OC是一門進行時語言的一個地方。
此時,你要修改一些,你知道,但卻在編譯時 還沒有體現(xiàn)出來屬性成員和方法函數(shù)時,你就只能乖乖的用runtime進行時吧!
現(xiàn)在實戰(zhàn)項目來了:
系統(tǒng)類UIImagePickerController 大家都不會陌生,基本上一個成熟的APP都需要用到這個類。相冊選擇器
讓用戶去相冊中,選擇相片? 就只能使用系統(tǒng)的這個類,讓后監(jiān)聽delegate回調 取出用戶選擇的相片。
但系統(tǒng)這個類有一個不好的地方就是,不能多選!每次選擇相片,只能一張一張的選!? 如果讓用戶去選9張相片,你的APP讓用戶去一張一張的選,我想選完9張相片后,你的APP就可以跟用戶說byebye了!
而這個項目,就是利用runtime去修改UIImagePickerController的屬性、方法函數(shù),來實現(xiàn)我們需要的多選狀態(tài)。
代碼我直接上到gitHub上了。
大家移步到gitHub上downLoad一下就好了?
Demo中 注釋非常的詳細,特別是對于runtime中的方法解說的很詳細。所以這里就不再重復了。
如果覺得有用,記得gitHub上給個星!
在這里上一些Demo的運行圖: