為什么要看書
為什么要多看書呢荞彼?
在技術(shù)類書籍上,看書的目的昂羡,不是為了記住所有的技術(shù)絮记,而是為了積累相關(guān)的技術(shù),在需要用到時(shí)能夠信手拈來虐先。
此書的定位
比如怨愤,最近看了唐巧的《iOS開發(fā)進(jìn)階》,嚴(yán)格意義上來說蛹批,這本讀物撰洗,是作者在其博客文章的基礎(chǔ)上,集合而成的腐芍,是對其發(fā)表的文章一個(gè)綜合差导。
所以,整本書甸赃,各章節(jié)之間柿汛,不會有太多的聯(lián)系冗酿,勉強(qiáng)只能算是對iOS開發(fā)知識埠对,某些比較重要的知識點(diǎn)的分門別類络断,論述了某個(gè)知識點(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ǔ)充讀物固灵。
以上捅伤,是個(gè)人對本書定位的一些看法,各花入各眼巫玻,不喜勿噴丛忆。對于想入手此書的開發(fā)者,也可作為參考仍秤。
如果你正在面試熄诡,或者正準(zhǔn)備跳槽,不妨看看我精心總結(jié)的iOS大廠面試資料:https://gitee.com/Mcci7/i-oser 來獲取一份詳細(xì)的大廠面試資料 為你的跳槽加薪多一份保障
此書的精彩內(nèi)容分享
說完了書的定位诗力,對本書某些值得單獨(dú)拿出來談?wù)劦哪承﹥?nèi)容凰浮,就在這里開始展開吧。
此書對技術(shù)細(xì)節(jié)的把握姜骡,還是值得看的导坟,對于開發(fā)基礎(chǔ)的夯實(shí),有一定的作用圈澈。比如內(nèi)存管理惫周,CoreText排版引擎,以及第三方工具比如Charles康栈、Reveal的使用等知識點(diǎn)递递,可深入細(xì)看。
書的目錄結(jié)構(gòu)
全書分為三個(gè)部分啥么,分別來說下登舞。
引言
引言里,主要講述了提高開發(fā)技能的一些途徑悬荣。
關(guān)于如何提高iOS開發(fā)技能
1菠秒、閱讀博客
相信這是最簡單易行的學(xué)習(xí)方式,利用碎片化的時(shí)間,但也需要更高的專注力践叠,因?yàn)樗槠拈喿x言缤,容易被分散注意力,而且閱讀范圍的擴(kuò)散會無節(jié)制禁灼。
比如管挟,博客文章里有其它鏈接 ,跳轉(zhuǎn)鏈接后弄捕,第二篇文章又包括其它鏈接僻孝,這就容易導(dǎo)致有限的時(shí)間內(nèi),看不完想要看的文章守谓。
最簡單的解決辦法就是穿铆,不點(diǎn)擊文章里的鏈接,看完后再發(fā)散思維斋荞,去看其它鏈接文章悴务。
2、讀書
這不就是我寫這篇文章的目的嗎譬猫。讀書讯檐,有利于全面、系統(tǒng)地學(xué)習(xí)知識染服。
3别洪、看蘋果的官方文檔
這個(gè)是最全面,最權(quán)威的學(xué)習(xí)方式柳刮,但相對來說挖垛,也比較枯燥。所有的iOS開發(fā)技術(shù)秉颗,都能在這里學(xué)習(xí)到痢毒。
說到這里,聯(lián)想到第二點(diǎn)提到的讀書蚕甥,其實(shí)現(xiàn)在市面上的大部分入門級書籍哪替,大部分內(nèi)容都是對蘋果官方API的介紹和應(yīng)用。所以某種意義上來說菇怀,看書也顯得不是很必要凭舶。
4、看開源項(xiàng)目的代碼
我個(gè)人覺得爱沟,這是開發(fā)進(jìn)階的必要手段帅霜。對設(shè)計(jì)模式、編碼規(guī)范呼伸、基礎(chǔ)知識身冀,這些方面的提高都會有極大的幫助。
一、iOS開發(fā)工具
分享了一些常用搂根、實(shí)用的開發(fā)工具蝶怔。
但是,書中提及的移動統(tǒng)計(jì)工具Flurry兄墅、崩潰日志記錄工具Crashlytics、App Store統(tǒng)計(jì)工具App Annie澳叉,這些工具可能有其它更好的替代者隙咸,相對來說,也顯得過時(shí)成洗。
最后提及的Xcode插件五督,由于目前Xcode已經(jīng)不支持插件,因此也就成了雞肋瓶殃。
所以充包,現(xiàn)在來看,以下三個(gè)工具遥椿,個(gè)人覺得是比較實(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
這個(gè)界面調(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)比較有價(jià)值的知識點(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)生的原因以及解決方案。
還有另外一個(gè)問題达罗,就是Core Foundation對象的內(nèi)存管理坝撑,無法使用ARC,需要開發(fā)者手動管理內(nèi)存粮揉。
CoreText排版引擎
可以說巡李,這個(gè)章節(jié),是此書比較有價(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ā)效率的技巧等等埠戳【可以有選擇性的看。
三整胃、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審核時(shí)拒絕除嘹,是安全的。
Tagged Pointer對象
Tagged Pointer對象岸蜗,可能相對來說比較陌生尉咕。這是蘋果在2013年,為了節(jié)省內(nèi)存和提高執(zhí)行效率璃岳,在64位程序上年缎,引入的概念。引入后铃慷,相關(guān)邏輯能減少一半的內(nèi)存占用单芜,并有3倍的訪問速度提升,以及100倍的創(chuàng)建犁柜、銷毀速度提升洲鸠。
Tagged Pointer通過在其最后一個(gè)bit位設(shè)置一個(gè)特殊標(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指針就是指向這個(gè)類吮播。
_NSConcreteGlobalBlock:全局的靜態(tài)block变屁,不會訪問任何外部變量,不會涉及到任何拷貝意狠,比如一個(gè)空的block
_NSConcreteStackBlock:保存在棧中的block粟关,當(dāng)函數(shù)返回時(shí)被銷毀。
_NSConcreteMallocBlock:保存在堆中的block环戈,當(dāng)引用計(jì)數(shù)為0時(shí)被銷毀闷板。該類型的block都是由_NSConcreteStackBlock類型的block從棧中復(fù)制到堆中形成的。
block使用的注意事項(xiàng)
由于block會引用外部的變量院塞,比較容易造成循環(huán)引用蛔垢。對于這種問題,需要將引用的一方變成weak的迫悠,從而避免循環(huán)引用鹏漆。
總結(jié)
好了,全書的分享到此結(jié)束创泄,希望能夠幫助到大家艺玲。
雖然書中部分內(nèi)容有些過時(shí),或者離進(jìn)階有一段距離鞠抑,但也不乏值得借鑒的內(nèi)容饭聚。總體上搁拙,可以作為基礎(chǔ)參考讀物秒梳,但如果真的要學(xué)習(xí)進(jìn)階內(nèi)容法绵,建議不要抱太大期望。
以上酪碘,是我的個(gè)人看法朋譬,還是那句,不喜勿噴哈兴垦。
作者:Mr獅子先生
鏈接:http://www.reibang.com/p/2cb38cf6c6dc\