唐巧的《iOS開(kāi)發(fā)進(jìn)階》 - 讀后感
為什么要看書(shū)
為什么要多看書(shū)呢归榕?
在技術(shù)類(lèi)書(shū)籍上叁征,看書(shū)的目的纳账,不是為了記住所有的技術(shù),而是為了積累相關(guān)的技術(shù)捺疼,在需要用到時(shí)能夠信手拈來(lái)疏虫。
此書(shū)的定位
比如,最近看了唐巧的《iOS開(kāi)發(fā)進(jìn)階》啤呼,嚴(yán)格意義上來(lái)說(shuō)卧秘,這本讀物,是作者在其博客文章的基礎(chǔ)上官扣,集合而成的翅敌,是對(duì)其發(fā)表的文章一個(gè)綜合。
所以惕蹄,整本書(shū)蚯涮,各章節(jié)之間,不會(huì)有太多的聯(lián)系卖陵,勉強(qiáng)只能算是對(duì)iOS開(kāi)發(fā)知識(shí)遭顶,某些比較重要的知識(shí)點(diǎn)的分門(mén)別類(lèi),論述了某個(gè)知識(shí)點(diǎn)的進(jìn)階應(yīng)用赶促,卻忽略了知識(shí)點(diǎn)之間的關(guān)聯(lián)液肌,也沒(méi)有對(duì)這些知識(shí)點(diǎn)的綜合應(yīng)用。
某種意義上來(lái)說(shuō)鸥滨,可以把這本書(shū)當(dāng)作是手冊(cè)類(lèi)的技術(shù)查詢(xún)書(shū)嗦哆,而非iOS開(kāi)發(fā)的綜合應(yīng)用谤祖。
與其說(shuō)是開(kāi)發(fā)進(jìn)階,我反倒覺(jué)得這本書(shū)的內(nèi)容老速,更適合入門(mén)初學(xué)者或者經(jīng)驗(yàn)尚不是太足的開(kāi)發(fā)者粥喜。而對(duì)于經(jīng)驗(yàn)較豐富的開(kāi)發(fā)人員,此書(shū)可作為知識(shí)盲點(diǎn)的補(bǔ)充讀物橘券。
以上额湘,是個(gè)人對(duì)本書(shū)定位的一些看法,各花入各眼旁舰,不喜勿噴锋华。對(duì)于想入手此書(shū)的開(kāi)發(fā)者,也可作為參考箭窜。
此書(shū)的精彩內(nèi)容分享
說(shuō)完了書(shū)的定位毯焕,對(duì)本書(shū)某些值得單獨(dú)拿出來(lái)談?wù)劦哪承﹥?nèi)容,就在這里開(kāi)始展開(kāi)吧磺樱。
此書(shū)對(duì)技術(shù)細(xì)節(jié)的把握纳猫,還是值得看的,對(duì)于開(kāi)發(fā)基礎(chǔ)的夯實(shí)竹捉,有一定的作用芜辕。比如內(nèi)存管理,CoreText排版引擎块差,以及第三方工具比如Charles侵续、Reveal的使用等知識(shí)點(diǎn),可深入細(xì)看憾儒。
書(shū)的目錄結(jié)構(gòu)
全書(shū)分為三個(gè)部分询兴,分別來(lái)說(shuō)下。
引言
引言里起趾,主要講述了提高開(kāi)發(fā)技能的一些途徑诗舰。
關(guān)于如何提高iOS開(kāi)發(fā)技能
1、閱讀博客
相信這是最簡(jiǎn)單易行的學(xué)習(xí)方式训裆,利用碎片化的時(shí)間眶根,但也需要更高的專(zhuān)注力,因?yàn)樗槠拈喿x边琉,容易被分散注意力属百,而且閱讀范圍的擴(kuò)散會(huì)無(wú)節(jié)制。
比如变姨,博客文章里有其它鏈接 族扰,跳轉(zhuǎn)鏈接后,第二篇文章又包括其它鏈接,這就容易導(dǎo)致有限的時(shí)間內(nèi)渔呵,看不完想要看的文章怒竿。
最簡(jiǎn)單的解決辦法就是,不點(diǎn)擊文章里的鏈接扩氢,看完后再發(fā)散思維耕驰,去看其它鏈接文章。
2录豺、讀書(shū)
這不就是我寫(xiě)這篇文章的目的嗎朦肘。讀書(shū),有利于全面双饥、系統(tǒng)地學(xué)習(xí)知識(shí)媒抠。
3、看蘋(píng)果的官方文檔
這個(gè)是最全面兢哭,最權(quán)威的學(xué)習(xí)方式领舰,但相對(duì)來(lái)說(shuō)夫嗓,也比較枯燥迟螺。所有的iOS開(kāi)發(fā)技術(shù),都能在這里學(xué)習(xí)到舍咖。
說(shuō)到這里矩父,聯(lián)想到第二點(diǎn)提到的讀書(shū),其實(shí)現(xiàn)在市面上的大部分入門(mén)級(jí)書(shū)籍排霉,大部分內(nèi)容都是對(duì)蘋(píng)果官方API的介紹和應(yīng)用窍株。所以某種意義上來(lái)說(shuō),看書(shū)也顯得不是很必要攻柠。
4球订、看開(kāi)源項(xiàng)目的代碼
我個(gè)人覺(jué)得,這是開(kāi)發(fā)進(jìn)階的必要手段瑰钮。對(duì)設(shè)計(jì)模式冒滩、編碼規(guī)范、基礎(chǔ)知識(shí)浪谴,這些方面的提高都會(huì)有極大的幫助开睡。
一、iOS開(kāi)發(fā)工具
分享了一些常用苟耻、實(shí)用的開(kāi)發(fā)工具篇恒。
但是,書(shū)中提及的移動(dòng)統(tǒng)計(jì)工具Flurry凶杖、崩潰日志記錄工具Crashlytics胁艰、App Store統(tǒng)計(jì)工具App Annie,這些工具可能有其它更好的替代者,相對(duì)來(lái)說(shuō)腾么,也顯得過(guò)時(shí)醋虏。
最后提及的Xcode插件,由于目前Xcode已經(jīng)不支持插件哮翘,因此也就成了雞肋颈嚼。
所以,現(xiàn)在來(lái)看饭寺,以下三個(gè)工具阻课,個(gè)人覺(jué)得是比較實(shí)用的。
使用Cocoapods做依賴(lài)管理
主要用來(lái)管理第三方庫(kù)艰匙,當(dāng)然限煞,也可以將自己項(xiàng)目的組件提取出來(lái)成為庫(kù),然后使用Cocoapods來(lái)進(jìn)行管理员凝。
網(wǎng)絡(luò)封包分析工具Charles
著名的網(wǎng)絡(luò)抓包工具署驻,主要用于控制網(wǎng)絡(luò)流量、抓取網(wǎng)絡(luò)請(qǐng)求以及響應(yīng)健霹,以及其它一些功能旺上。
界面調(diào)試工具Reveal
這個(gè)界面調(diào)試工具,相信大家也不陌生糖埋。但是宣吱,隨著Xcode對(duì)自身集成的界面調(diào)試工具的不斷優(yōu)化,第三方工具Reveal的使用可能會(huì)越來(lái)越少瞳别。當(dāng)然征候,Reveal會(huì)有更強(qiáng)大的功能,包括不編譯調(diào)試UI等功能祟敛,還是比較實(shí)用的疤坝。
二、iOS開(kāi)發(fā)實(shí)踐
本章講述的內(nèi)容馆铁,本應(yīng)該是作為壓軸大戲的跑揉,但最后看完,卻大部分僅僅是對(duì)于一些基本知識(shí)的介紹而已叼架。這類(lèi)實(shí)踐畔裕,讀者也可以通過(guò)閱讀蘋(píng)果官方文檔,來(lái)獲得乖订。
下面將書(shū)中的兩點(diǎn)比較有價(jià)值的知識(shí)點(diǎn)扮饶,拿出來(lái)分享一下。
內(nèi)存管理
現(xiàn)在的開(kāi)發(fā)者乍构,可能大多是使用ARC來(lái)讓系統(tǒng)自動(dòng)管理內(nèi)存甜无,所以關(guān)于引用計(jì)數(shù)的知識(shí)扛点,可能相對(duì)來(lái)說(shuō)比較欠缺。
接觸最多的內(nèi)存管理問(wèn)題岂丘,可能集中在對(duì)象的循環(huán)引用問(wèn)題上陵究。書(shū)中詳細(xì)描述了引用計(jì)數(shù)的原理,也討論了循環(huán)引用問(wèn)題產(chǎn)生的原因以及解決方案奥帘。
還有另外一個(gè)問(wèn)題铜邮,就是Core Foundation對(duì)象的內(nèi)存管理,無(wú)法使用ARC寨蹋,需要開(kāi)發(fā)者手動(dòng)管理內(nèi)存松蒜。
CoreText排版引擎
可以說(shuō),這個(gè)章節(jié)已旧,是此書(shū)比較有價(jià)值的內(nèi)容所在秸苗。
書(shū)中提及,使用CoreText技術(shù)运褪,可以對(duì)于富文本進(jìn)行復(fù)雜的排版惊楼,還可以實(shí)現(xiàn)對(duì)于圖片、鏈接的點(diǎn)擊效果秸讹。文章結(jié)合大量的實(shí)例檀咙,進(jìn)行詳細(xì)介紹。
優(yōu)點(diǎn)是嗦枢,相對(duì)于UIWebView攀芯,內(nèi)存占用少,可以在后臺(tái)渲染文虏,可以做更好的原生交互效果,交互效果可以更加細(xì)膩殖演。
缺點(diǎn)是氧秘,渲染出來(lái)的內(nèi)容,不能方便地支持內(nèi)容的復(fù)制趴久。需要自己處理很多復(fù)雜邏輯丸相,比如鏈接點(diǎn)擊效果。
其它實(shí)戰(zhàn)技巧
講述了App Store審核彼棍,一些開(kāi)發(fā)灭忠、調(diào)試技巧,提高開(kāi)發(fā)效率的技巧等等座硕〕谧鳎可以有選擇性的看。
三华匾、iOS開(kāi)發(fā)底層原理
本部分講解了iOS開(kāi)發(fā)涉及的底層原理映琳,通過(guò)了解語(yǔ)言實(shí)現(xiàn)細(xì)節(jié),將加深對(duì)于語(yǔ)言的理解,從而能更加深入地理解語(yǔ)言背后的本質(zhì)萨西。
主要涉及以下三部分內(nèi)容有鹿。
Objective-C對(duì)象模型
通過(guò)了解Objective-C對(duì)象模型,來(lái)理解iOS如何支持KVO谎脯、Method Swizzling葱跋、block等特性。
此章節(jié)介紹的一些API源梭,作者聲明年局,不會(huì)被App Store審核時(shí)拒絕,是安全的咸产。
Tagged Pointer對(duì)象
Tagged Pointer對(duì)象矢否,可能相對(duì)來(lái)說(shuō)比較陌生。這是蘋(píng)果在2013年脑溢,為了節(jié)省內(nèi)存和提高執(zhí)行效率僵朗,在64位程序上,引入的概念屑彻。引入后验庙,相關(guān)邏輯能減少一半的內(nèi)存占用,并有3倍的訪(fǎng)問(wèn)速度提升社牲,以及100倍的創(chuàng)建粪薛、銷(xiāo)毀速度提升。
Tagged Pointer通過(guò)在其最后一個(gè)bit位設(shè)置一個(gè)特殊標(biāo)記搏恤,用于將數(shù)據(jù)直接保存在指針本身中违寿。專(zhuān)門(mén)用來(lái)存儲(chǔ)小的對(duì)象,例如NSNumber和NSDate熟空。
對(duì)于64位設(shè)備藤巢,蘋(píng)果除了引入Tagged Pointer來(lái)優(yōu)化小的對(duì)象外,對(duì)于普通的對(duì)象息罗,其isa指針也進(jìn)行了優(yōu)化和調(diào)整掂咒。
block對(duì)象模型
block的結(jié)構(gòu)體定義
struct Block_descriptor {
unsigned long int reserved;
unsigned long int size;
void (*copy)(void *dst, void *src);
void (*dispose)(void *);
};
struct Block_layout {
void *isa;
int flags;
int reserved;
void (*invoke)(void *, ...);
struct Block_descriptor *descriptor;
/* Imported variables. */
};
從上面代碼看出,Block_layout就是對(duì)block結(jié)構(gòu)體的定義:
isa指針:指向表明該block類(lèi)型的類(lèi)迈喉。
flags:按bit位表示一些block的附加信息绍刮,比如判斷block類(lèi)型、判斷block引用計(jì)數(shù)挨摸、判斷block是否需要執(zhí)行輔助函數(shù)等孩革。
reserved:保留變量。
invoke:函數(shù)指針油坝,指向具體的block實(shí)現(xiàn)的函數(shù)調(diào)用地址嫉戚。
descriptor:block的附加描述信息刨裆,比如保留變量數(shù)、block的大小彬檀、進(jìn)行copy或dispose的輔助函數(shù)指針帆啃。
variables:因?yàn)閎lock有閉包性,所以可以訪(fǎng)問(wèn)block外部的局部變量窍帝。這些variables就是復(fù)制到結(jié)構(gòu)體中的外部局部變量或變量的地址努潘。
block的類(lèi)型
block一共有三種類(lèi)型,每種類(lèi)型都有對(duì)應(yīng)的類(lèi)坤学,上述中isa指針就是指向這個(gè)類(lèi)疯坤。
_NSConcreteGlobalBlock:全局的靜態(tài)block,不會(huì)訪(fǎng)問(wèn)任何外部變量深浮,不會(huì)涉及到任何拷貝压怠,比如一個(gè)空的block
_NSConcreteStackBlock:保存在棧中的block,當(dāng)函數(shù)返回時(shí)被銷(xiāo)毀飞苇。
_NSConcreteMallocBlock:保存在堆中的block菌瘫,當(dāng)引用計(jì)數(shù)為0時(shí)被銷(xiāo)毀。該類(lèi)型的block都是由_NSConcreteStackBlock類(lèi)型的block從棧中復(fù)制到堆中形成的布卡。
block使用的注意事項(xiàng)
由于block會(huì)引用外部的變量雨让,比較容易造成循環(huán)引用。對(duì)于這種問(wèn)題忿等,需要將引用的一方變成weak的栖忠,從而避免循環(huán)引用。
總結(jié)
好了贸街,全書(shū)的分享到此結(jié)束庵寞,希望能夠幫助到大家。
雖然書(shū)中部分內(nèi)容有些過(guò)時(shí)匾浪,或者離進(jìn)階有一段距離皇帮,但也不乏值得借鑒的內(nèi)容〉氨玻總體上,可以作為基礎(chǔ)參考讀物将谊,但如果真的要學(xué)習(xí)進(jìn)階內(nèi)容冷溶,建議不要抱太大期望。
以上尊浓,是我的個(gè)人看法逞频,還是那句,不喜勿噴哈栋齿。
福利
最后苗胀,推薦一本真正進(jìn)階的讀物襟诸,《高性能iOS應(yīng)用開(kāi)發(fā)》,貌似是近一兩年才出版的基协,值得看歌亲。