分析一款ios應(yīng)用的源代碼方法如下:
成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),澗西企業(yè)網(wǎng)站建設(shè),澗西品牌網(wǎng)站建設(shè),網(wǎng)站定制,澗西網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,澗西網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
1、首先提取整個應(yīng)用文件的二進制代碼,建立for循環(huán)將機器所有字符串進行排列組合并標(biāo)記后編譯。
2、再建立for將應(yīng)用文件二進制代碼同所有的字符串排列組合編譯成的二進制文件進行對比。
3、最后通過標(biāo)記就能找到應(yīng)用的源代碼。
iOS應(yīng)用如何獲取BigApp插件里定義的配置?
在LoadingVC中請求數(shù)據(jù)
各個參數(shù)的詳細意義可能需要結(jié)合具體的功能再深入了解下。
這個首頁信息的內(nèi)容是需要自定義的,否則界面出來就是這個效果。
Tab的文字,圖標(biāo)也是在這邊加載的,可以在BigApp配置頁面修改。
相應(yīng)的配置修改 (Todo)
工時:
MJRefresh 是著名開發(fā)者及培訓(xùn)講師李明杰老師的作品,到現(xiàn)在在github已經(jīng)有10000多顆star,真真是極好用的iOS下拉刷新(也支持上拉加載更)控件。本文主要素材來源有 正在學(xué)hybrid開發(fā)的iOS開發(fā)者 J_Knight 的文章和 github 上李明杰老師的用法介紹(主要是本文下部分)。
該框架的結(jié)構(gòu)設(shè)計得很清晰,使用一個基類MJRefreshComponent來做一些基本的設(shè)定,然后通過繼承的方式,讓MJRefreshHeader和MJRefreshFooter分別具備下拉刷新和上拉加載的功能。從繼承機構(gòu)來看可以分為三層,具體可以從下面的圖里看出來:
其中一條繼承鏈?zhǔn)沁@樣的
開發(fā)者一般使用場景是這樣的:
作者 在類目 UIScrollView+MJRefresh 中運用運行時關(guān)聯(lián)屬性函數(shù) objc_setAssociatedObject 和 objc_getAssociatedObject 對 UIScrollView 視圖控件添加了 mj_header 、 mj_footer 等屬性.
MJRefreshNormalHeader 是最下層的子類, headerWithRefreshingTarget 和 headerWithRefreshingBlock 是最上層基類 MJRefreshComponent 暴露出的靜態(tài)快捷構(gòu)造方法。把對象的創(chuàng)建下放到子類,此處明顯用到了工廠方法。編譯時類型 mj_header is classof MJRefreshHeader ,運行時類型 MJRefreshNormalHeader 是其子類,此處是典型的多態(tài)特性的應(yīng)用。
即面向接口編碼,而非面向?qū)崿F(xiàn)編碼。作者從最上層基類 MJRefreshComponent 即暴露接口
具體實現(xiàn):
具體實現(xiàn),首先來看一下該控件的基類:MJRefreshComponent:
這個類作為該控件基類,涵蓋了基類所具備的成份:狀態(tài),回調(diào)block等,大致分成下面這5種職能:
監(jiān)聽的聲明:offset、size、state
對于監(jiān)聽的處理:
從上面等結(jié)構(gòu)圖可以看出,緊接著這個基類,下面分為codeMJRefreshHeader/code和codeMJRefreshFooter/code,這里順著codeMJRefreshHeader/code這個分支向下展開:
codeMJRefreshHeader/code繼承于codeMJRefreshComponent/code,它做了這幾件事:
初始化有兩種方法:動作-目標(biāo)/block塊函數(shù) 做回調(diào)
通過重寫codeprepare/code方法來設(shè)置header的高度:
通過重寫placeSubviews方法來重新調(diào)整y值:
這里提供一張圖來體現(xiàn)三個狀態(tài)的不同:
這個類是codeMJRefreshHeader/code類的子類,它做了兩件事:
給一張圖,讓大家直觀感受一下這兩個控件:
這個類通過覆蓋父類三個方法來實現(xiàn)上述兩個實現(xiàn):
在這里,將每一個狀態(tài)對應(yīng)的提示文字放入一個字典里面,codekey/code是狀態(tài)的codeNSNumber/code形式
這里主要是對codelastUpdatedTimeLabel/code和codestateLabel/code進行布局。要注意codelastUpdatedTimeLabel/code隱藏的情況。
在這里,根據(jù)傳入的codestate/code不同,在codestateLabel/code和codelastUpdatedTimeLabel/code里切換相應(yīng)的文字。
codeMJRefreshNormalHeader /code繼承于 codeMJRefreshStateHeader/code,它主要做了兩件事:
給一張圖來直觀感受一下這兩個view:
同codeMJRefreshStateHeader/code一樣,也是重寫了父類的三個方法:
到此為止,我們已經(jīng)從codeMJRefreshComponent/code到codeMJRefreshNormalHeader/code的實現(xiàn)過程看了一遍。可以看出,作者將codeprepare/code,codeplaceSubviews/code以及 setState: 方法作為基類的方法,讓下面的子類去一層一層實現(xiàn)。
而每一層的子類,根據(jù)自身的職責(zé),分別按照自己的方式來實現(xiàn)這三個方法:
這樣做的好處是,如果想要增加某種類型的 header ,只要在某一層上做文章即可。例如該框架里的 MJRefreshGifHeader ,它和 MJRefreshNormalHeader 屬于同一級,都是繼承于 MJRefreshStateHeader 。因為二者都具有相同形式的 stateLabel 和 lastUpdatedTimeLabel ,唯一不同的就是左側(cè)的部分:
還是提供一張圖來直觀感受一下:
下面我們來看實現(xiàn):
它提供了兩個接口,是用來設(shè)置不同狀態(tài)下使用的圖片數(shù)組的:
和MJRefreshNormalHeader一樣,它也重寫了基類提供的三個方法來實現(xiàn)顯示gif圖片的職能。