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

唐巧的《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ā)》,貌似是近一兩年才出版的基协,值得看歌亲。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市澜驮,隨后出現(xiàn)的幾起案子陷揪,更是在濱河造成了極大的恐慌,老刑警劉巖杂穷,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悍缠,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡耐量,警方通過(guò)查閱死者的電腦和手機(jī)飞蚓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)廊蜒,“玉大人趴拧,你說(shuō)我怎么就攤上這事【⒚辏” “怎么了八堡?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵扑馁,是天一觀(guān)的道長(zhǎng)襟交。 經(jīng)常有香客問(wèn)我,道長(zhǎng)寨闹,這世上最難降的妖魔是什么汰现? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任挂谍,我火速辦了婚禮,結(jié)果婚禮上瞎饲,老公的妹妹穿的比我還像新娘口叙。我一直安慰自己,他們只是感情好嗅战,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布妄田。 她就那樣靜靜地躺著,像睡著了一般驮捍。 火紅的嫁衣襯著肌膚如雪疟呐。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,549評(píng)論 1 312
  • 那天东且,我揣著相機(jī)與錄音启具,去河邊找鬼。 笑死珊泳,一個(gè)胖子當(dāng)著我的面吹牛鲁冯,可吹牛的內(nèi)容都是我干的拷沸。 我是一名探鬼主播,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼薯演,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼撞芍!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起涣仿,我...
    開(kāi)封第一講書(shū)人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤勤庐,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后好港,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體愉镰,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年钧汹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了丈探。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拔莱,死狀恐怖碗降,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情塘秦,我是刑警寧澤讼渊,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站尊剔,受9級(jí)特大地震影響爪幻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜须误,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一挨稿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧京痢,春花似錦奶甘、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至方淤,卻和暖如春侣监,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背臣淤。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留窃爷,地道東北人邑蒋。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓姓蜂,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親医吊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子钱慢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361

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