唐巧的《iOS開發(fā)進(jìn)階》 - 讀后感

唐巧的《iOS開發(fā)進(jìn)階》 - 讀后感

為什么要看書

為什么要多看書呢?

在技術(shù)類書籍上,看書的目的,不是為了記住所有的技術(shù),而是為了積累相關(guān)的技術(shù),在需要用到時能夠信手拈來。

此書的定位

比如,最近看了唐巧的《iOS開發(fā)進(jìn)階》,嚴(yán)格意義上來說,這本讀物,是作者在其博客文章的基礎(chǔ)上,集合而成的,是對其發(fā)表的文章一個綜合。

所以,整本書,各章節(jié)之間,不會有太多的聯(lián)系,勉強(qiáng)只能算是對iOS開發(fā)知識,某些比較重要的知識點(diǎn)的分門別類,論述了某個知識點(diǎn)的進(jìn)階應(yīng)用,卻忽略了知識點(diǎn)之間的關(guān)聯(lián),也沒有對這些知識點(diǎn)的綜合應(yīng)用。

某種意義上來說,可以把這本書當(dāng)作是手冊類的技術(shù)查詢書,而非iOS開發(fā)的綜合應(yīng)用。

與其說是開發(fā)進(jìn)階,我反倒覺得這本書的內(nèi)容,更適合入門初學(xué)者或者經(jīng)驗(yàn)尚不是太足的開發(fā)者。而對于經(jīng)驗(yàn)較豐富的開發(fā)人員,此書可作為知識盲點(diǎn)的補(bǔ)充讀物。

以上,是個人對本書定位的一些看法,各花入各眼,不喜勿噴。對于想入手此書的開發(fā)者,也可作為參考。

此書的精彩內(nèi)容分享

說完了書的定位,對本書某些值得單獨(dú)拿出來談?wù)劦哪承﹥?nèi)容,就在這里開始展開吧。

此書對技術(shù)細(xì)節(jié)的把握,還是值得看的,對于開發(fā)基礎(chǔ)的夯實(shí),有一定的作用。比如內(nèi)存管理,CoreText排版引擎,以及第三方工具比如Charles、Reveal的使用等知識點(diǎn),可深入細(xì)看。

書的目錄結(jié)構(gòu)

全書分為三個部分,分別來說下。

引言

引言里,主要講述了提高開發(fā)技能的一些途徑。

關(guān)于如何提高iOS開發(fā)技能

1、閱讀博客

相信這是最簡單易行的學(xué)習(xí)方式,利用碎片化的時間,但也需要更高的專注力,因?yàn)樗槠拈喿x,容易被分散注意力,而且閱讀范圍的擴(kuò)散會無節(jié)制。

比如,博客文章里有其它鏈接 ,跳轉(zhuǎn)鏈接后,第二篇文章又包括其它鏈接,這就容易導(dǎo)致有限的時間內(nèi),看不完想要看的文章。

最簡單的解決辦法就是,不點(diǎn)擊文章里的鏈接,看完后再發(fā)散思維,去看其它鏈接文章。

2、讀書

這不就是我寫這篇文章的目的嗎。讀書,有利于全面、系統(tǒng)地學(xué)習(xí)知識。

3、看蘋果的官方文檔

這個是最全面,最權(quán)威的學(xué)習(xí)方式,但相對來說,也比較枯燥。所有的iOS開發(fā)技術(shù),都能在這里學(xué)習(xí)到。

說到這里,聯(lián)想到第二點(diǎn)提到的讀書,其實(shí)現(xiàn)在市面上的大部分入門級書籍,大部分內(nèi)容都是對蘋果官方API的介紹和應(yīng)用。所以某種意義上來說,看書也顯得不是很必要。

4、看開源項(xiàng)目的代碼

我個人覺得,這是開發(fā)進(jìn)階的必要手段。對設(shè)計(jì)模式、編碼規(guī)范、基礎(chǔ)知識,這些方面的提高都會有極大的幫助。

一、iOS開發(fā)工具

分享了一些常用、實(shí)用的開發(fā)工具。

但是,書中提及的移動統(tǒng)計(jì)工具Flurry、崩潰日志記錄工具Crashlytics、App Store統(tǒng)計(jì)工具App Annie,這些工具可能有其它更好的替代者,相對來說,也顯得過時。

最后提及的Xcode插件,由于目前Xcode已經(jīng)不支持插件,因此也就成了雞肋。

所以,現(xiàn)在來看,以下三個工具,個人覺得是比較實(shí)用的。

使用Cocoapods做依賴管理

主要用來管理第三方庫,當(dāng)然,也可以將自己項(xiàng)目的組件提取出來成為庫,然后使用Cocoapods來進(jìn)行管理。

網(wǎng)絡(luò)封包分析工具Charles

著名的網(wǎng)絡(luò)抓包工具,主要用于控制網(wǎng)絡(luò)流量、抓取網(wǎng)絡(luò)請求以及響應(yīng),以及其它一些功能。

界面調(diào)試工具Reveal

這個界面調(diào)試工具,相信大家也不陌生。但是,隨著Xcode對自身集成的界面調(diào)試工具的不斷優(yōu)化,第三方工具Reveal的使用可能會越來越少。當(dāng)然,Reveal會有更強(qiáng)大的功能,包括不編譯調(diào)試UI等功能,還是比較實(shí)用的。

二、iOS開發(fā)實(shí)踐

本章講述的內(nèi)容,本應(yīng)該是作為壓軸大戲的,但最后看完,卻大部分僅僅是對于一些基本知識的介紹而已。這類實(shí)踐,讀者也可以通過閱讀蘋果官方文檔,來獲得。

下面將書中的兩點(diǎn)比較有價值的知識點(diǎn),拿出來分享一下。

內(nèi)存管理

現(xiàn)在的開發(fā)者,可能大多是使用ARC來讓系統(tǒng)自動管理內(nèi)存,所以關(guān)于引用計(jì)數(shù)的知識,可能相對來說比較欠缺。

接觸最多的內(nèi)存管理問題,可能集中在對象的循環(huán)引用問題上。書中詳細(xì)描述了引用計(jì)數(shù)的原理,也討論了循環(huán)引用問題產(chǎn)生的原因以及解決方案。

還有另外一個問題,就是Core Foundation對象的內(nèi)存管理,無法使用ARC,需要開發(fā)者手動管理內(nèi)存。

CoreText排版引擎

可以說,這個章節(jié),是此書比較有價值的內(nèi)容所在。

書中提及,使用CoreText技術(shù),可以對于富文本進(jìn)行復(fù)雜的排版,還可以實(shí)現(xiàn)對于圖片、鏈接的點(diǎn)擊效果。文章結(jié)合大量的實(shí)例,進(jìn)行詳細(xì)介紹。

優(yōu)點(diǎn)是,相對于UIWebView,內(nèi)存占用少,可以在后臺渲染,可以做更好的原生交互效果,交互效果可以更加細(xì)膩。

缺點(diǎn)是,渲染出來的內(nèi)容,不能方便地支持內(nèi)容的復(fù)制。需要自己處理很多復(fù)雜邏輯,比如鏈接點(diǎn)擊效果。

其它實(shí)戰(zhàn)技巧

講述了App Store審核,一些開發(fā)、調(diào)試技巧,提高開發(fā)效率的技巧等等??梢杂羞x擇性的看。

三、iOS開發(fā)底層原理

本部分講解了iOS開發(fā)涉及的底層原理,通過了解語言實(shí)現(xiàn)細(xì)節(jié),將加深對于語言的理解,從而能更加深入地理解語言背后的本質(zhì)。

主要涉及以下三部分內(nèi)容。

Objective-C對象模型

通過了解Objective-C對象模型,來理解iOS如何支持KVO、Method Swizzling、block等特性。

此章節(jié)介紹的一些API,作者聲明,不會被App Store審核時拒絕,是安全的。

Tagged Pointer對象

Tagged Pointer對象,可能相對來說比較陌生。這是蘋果在2013年,為了節(jié)省內(nèi)存和提高執(zhí)行效率,在64位程序上,引入的概念。引入后,相關(guān)邏輯能減少一半的內(nèi)存占用,并有3倍的訪問速度提升,以及100倍的創(chuàng)建、銷毀速度提升。

Tagged Pointer通過在其最后一個bit位設(shè)置一個特殊標(biāo)記,用于將數(shù)據(jù)直接保存在指針本身中。專門用來存儲小的對象,例如NSNumber和NSDate。

對于64位設(shè)備,蘋果除了引入Tagged Pointer來優(yōu)化小的對象外,對于普通的對象,其isa指針也進(jìn)行了優(yōu)化和調(diào)整。

block對象模型

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就是對block結(jié)構(gòu)體的定義:

isa指針:指向表明該block類型的類。

flags:按bit位表示一些block的附加信息,比如判斷block類型、判斷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有閉包性,所以可以訪問block外部的局部變量。這些variables就是復(fù)制到結(jié)構(gòu)體中的外部局部變量或變量的地址。

block的類型

block一共有三種類型,每種類型都有對應(yīng)的類,上述中isa指針就是指向這個類。

_NSConcreteGlobalBlock:全局的靜態(tài)block,不會訪問任何外部變量,不會涉及到任何拷貝,比如一個空的block

_NSConcreteStackBlock:保存在棧中的block,當(dāng)函數(shù)返回時被銷毀。

_NSConcreteMallocBlock:保存在堆中的block,當(dāng)引用計(jì)數(shù)為0時被銷毀。該類型的block都是由_NSConcreteStackBlock類型的block從棧中復(fù)制到堆中形成的。

block使用的注意事項(xiàng)

由于block會引用外部的變量,比較容易造成循環(huán)引用。對于這種問題,需要將引用的一方變成weak的,從而避免循環(huán)引用。

總結(jié)

好了,全書的分享到此結(jié)束,希望能夠幫助到大家。

雖然書中部分內(nèi)容有些過時,或者離進(jìn)階有一段距離,但也不乏值得借鑒的內(nèi)容??傮w上,可以作為基礎(chǔ)參考讀物,但如果真的要學(xué)習(xí)進(jìn)階內(nèi)容,建議不要抱太大期望。

以上,是我的個人看法,還是那句,不喜勿噴哈。

福利

最后,推薦一本真正進(jìn)階的讀物,《高性能iOS應(yīng)用開發(fā)》,貌似是近一兩年才出版的,值得看。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容