自定義統(tǒng)計(jì)可復(fù)用SDK

之前換工作饼灿,有家公司福利待遇各方面都特別滿意,十分想去帝美,但是面試碰到個(gè)問(wèn)題碍彭,讓我尷尬了,雖然本人到目前為止從事iOS開發(fā)三年多,但大多獨(dú)立開發(fā)硕旗,這問(wèn)題還真沒(méi)深入去考慮過(guò)窗骑。下面我具體講講遇到的問(wèn)題。

首先漆枚,那個(gè)公司的項(xiàng)目要自己開發(fā)統(tǒng)計(jì)的sdk创译,不用第三方庫(kù),主要是考慮到數(shù)據(jù)安全的問(wèn)題墙基,這其實(shí)沒(méi)什么软族,自己開發(fā)就自己開發(fā)吧,然后残制,面試官問(wèn)我開發(fā)這個(gè)sdk的思路是什么立砸,應(yīng)該怎么去做,然后我滔滔不絕的把友盟統(tǒng)計(jì)的實(shí)現(xiàn)原理與步驟吧啦吧啦講講一遍初茶,但是颗祝,他緊接著就問(wèn)我一個(gè)問(wèn)題,說(shuō):你不覺(jué)得這樣做恼布,耦合度很高嗎螺戳?統(tǒng)計(jì)的代碼分散在工程的各個(gè)角落,維護(hù)或修改起來(lái)多麻煩折汞?當(dāng)時(shí)我就震驚了……what倔幼?……你如果要統(tǒng)計(jì)按鈕點(diǎn)擊次數(shù),你不在按鈕實(shí)現(xiàn)方法里加個(gè)統(tǒng)計(jì)的代碼爽待,那要怎么做呢损同?因?yàn)閺膩?lái)沒(méi)考慮過(guò)這方面的問(wèn)題,所以當(dāng)時(shí)我的腦子是空白的鸟款。

理所當(dāng)然的面試失敗膏燃,回到家,我痛定思痛何什,深入研究了一下蹄梢,在這里寫一下我的心得,有不對(duì)的地方希望留言指正富俄。

首先傳統(tǒng)統(tǒng)計(jì),例如友盟而咆,他有以下幾個(gè)缺點(diǎn):

1.復(fù)用性差霍比,這部分埋點(diǎn)代碼很難給其他項(xiàng)目復(fù)用,復(fù)用性基本為零

2.工作量大暴备,尤其在頁(yè)面較多時(shí)悠瞬,需要修改的代碼也多

3.引入“臟代碼”,不易維護(hù),尤其是稍微大一點(diǎn)的app浅妆,這樣的代碼幾乎遍地都是 (這里的臟代碼指的是用戶行為分析這種業(yè)務(wù)其實(shí)跟主業(yè)務(wù)沒(méi)有關(guān)系望迎,不應(yīng)該保持如此高的耦合度,因?yàn)檫@些代碼會(huì)干擾我們對(duì)項(xiàng)目主業(yè)務(wù)的維護(hù))

因此凌外,采用這種傳統(tǒng)的代碼辩尊,雖然直觀,方便康辑,但是在可復(fù)用性以及可維護(hù)性來(lái)說(shuō)摄欲,有很大的缺陷。我在網(wǎng)上看了很多的博客論壇之類的疮薇,總結(jié)一下可以用runtime來(lái)有效的解決這一問(wèn)題胸墙。

由于Runtime知識(shí)不屬于本文的重點(diǎn),這里只簡(jiǎn)單介紹按咒。

在iOS中迟隅,我們可以在運(yùn)行時(shí)替換兩個(gè)方法的實(shí)現(xiàn),達(dá)到“勾住”某個(gè)方法并注入代碼的目的励七。具體做法是:

重載類的“+(void)load”方法智袭,在程序加載到內(nèi)存時(shí)利用Runtime的method_exchangeImplementations等接口將方法(設(shè)為M)的實(shí)現(xiàn)互相交換。當(dāng)方法M被調(diào)用時(shí)就會(huì)被勾住(Hook)呀伙,執(zhí)行我們的方法补履。

這種技術(shù)也稱為Method Swizzling,屬于面向切面編程(Aspect-Oriented Programming)的一種實(shí)現(xiàn)剿另。

簡(jiǎn)書里不知道怎么粘貼代碼箫锤,我復(fù)制粘貼過(guò)來(lái)的都湊成一團(tuán)了,所以我在CSDN上寫完了雨女,想看的可以點(diǎn)擊鏈接進(jìn)去看? 我的博客? 谚攒。喜歡的點(diǎn)贊,有問(wèn)題的留言氛堕,共同探討共同進(jìn)步馏臭。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市讼稚,隨后出現(xiàn)的幾起案子括儒,更是在濱河造成了極大的恐慌,老刑警劉巖锐想,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帮寻,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡赠摇,警方通過(guò)查閱死者的電腦和手機(jī)固逗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門浅蚪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人烫罩,你說(shuō)我怎么就攤上這事惜傲。” “怎么了贝攒?”我有些...
    開封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵盗誊,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我饿这,道長(zhǎng)浊伙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任长捧,我火速辦了婚禮嚣鄙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘串结。我一直安慰自己哑子,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開白布肌割。 她就那樣靜靜地躺著卧蜓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪把敞。 梳的紋絲不亂的頭發(fā)上弥奸,一...
    開封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音奋早,去河邊找鬼盛霎。 笑死,一個(gè)胖子當(dāng)著我的面吹牛耽装,可吹牛的內(nèi)容都是我干的愤炸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼掉奄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼规个!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起姓建,我...
    開封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤诞仓,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后速兔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狂芋,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年憨栽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡屑柔,死狀恐怖屡萤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情掸宛,我是刑警寧澤死陆,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站唧瘾,受9級(jí)特大地震影響措译,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜饰序,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一领虹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧求豫,春花似錦塌衰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蚤告,卻和暖如春努酸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背杜恰。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工获诈, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人箫章。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓烙荷,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親檬寂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子终抽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容