IOS讀書筆記第二篇:52個有效方法

第37條:理解“塊”這一概念
塊可以實現(xiàn)閉包棒动』橥眩“擴展extension”加入GCC編譯器雹仿。Clang 是開發(fā)Mac OSX及iOS程序所用嘱吗。
塊與函數(shù)類似玄组。只不過是直接定義在另一個函數(shù)里的,符號^后面跟{}里面是塊的實現(xiàn)代碼。
塊其實就是一個值俄讹。塊類型的語法與函數(shù)指針近似哆致。
與int、float或Objective-C對象一樣患膛,也可以把塊賦給變量摊阀,然后像使用其他變量那樣使用它。
返回類型剩瓶,塊名稱驹溃。parameters:參數(shù)名稱
return_type (^block_name)(parameters)


D535FDE1-E758-47DC-A9BC-C6FB54CDD096.png

int add = addBlock(2,5);

塊的強大之處:在聲明它的范圍里,所有變量都可以為其所捕獲延曙。那個范圍里的全部變量豌鹤,在快里依然可用。
14FDD41D-CAE2-498A-A72F-ADBCE3547CB7.png

默認(rèn)枝缔,被塊所捕獲的變量布疙,是不可以在塊里修改的。若改就報錯愿卸。如果聲明變量的時候可以加上_block修飾符灵临,就可以在塊內(nèi)修改。
塊如果所捕獲的遍歷是對象類型就會自動保留它趴荸。塊本身可視為對象儒溉。有引用計數(shù)。當(dāng)最后一個指向塊的引用移走之后发钝。塊就回收了顿涣。
在存放塊對象的內(nèi)存區(qū)域中,首個變量是指向Class對象的指針酝豪,該指針叫做isa涛碑。其余內(nèi)存里含有塊對象正常運轉(zhuǎn)所需的各種信息。
第36條:不要使用retainCount
OC中通過引用計數(shù)來管理內(nèi)存孵淘。對象有計數(shù)器蒲障,當(dāng)對象的計數(shù)變?yōu)?之后,對象就被系統(tǒng)所回收和摧毀了瘫证。
NSObject有retainCount揉阎,之所以沒有用的原因是:它所返回的保留計數(shù)只是某個給定時間點上的值。該方法并未考慮到系統(tǒng)會稍后把自動釋放池清空痛悯。因而不會將后續(xù)的釋放操作從返回值里減去余黎,所以此值不準(zhǔn)。
while ([object retainCount]) {
[object release];

}
retainCount 可能永遠(yuǎn)不返回0载萌,
第35條:用"僵尸對象"調(diào)試內(nèi)存管理問題
僵尸對象是一個調(diào)試功能惧财。運行期系統(tǒng)會把所有已經(jīng)回收的實例轉(zhuǎn)化為特殊的“僵尸對象”巡扇,而不會真正的回收他們。
第34條:合理運用自動釋放池垮衷,可降低應(yīng)用程序的內(nèi)存峰值厅翔。第33條:以弱引用避免保留環(huán)。
第28條:通過協(xié)議提供匿名函數(shù)搀突。用協(xié)議把自己所寫的API之中的實現(xiàn)細(xì)節(jié)隱藏起來刀闷。將返回的對象設(shè)計為遵從此協(xié)議的純id類型。在字典中仰迁,鍵的標(biāo)準(zhǔn)內(nèi)存管理語義是“設(shè)置時拷貝”甸昏,而值的語義則是“設(shè)置時保留”。設(shè)置鍵值對

  • (void)setobject:(id)object forKey:(id<NSCopying>)key. 鍵的那個參數(shù)其類型為id<NSCopying>,作為參數(shù)值的對象徐许。
    這個key參數(shù)可以視為匿名對象施蜜。字典不關(guān)心key對象所屬的具體類。
    處理數(shù)據(jù)庫連接的程序庫可以用這個思路雌隅。第27條:使用"class-continuation分類"隱藏實現(xiàn)細(xì)節(jié)翻默。
    通過“class-continuation分類”向類中新增實例變量。恰起,如果某屬性在主接口中聲明為“只讀”修械,而類的內(nèi)部又要用設(shè)置方法修改此屬性,那么就在“class-continuation分類”中將其擴展為“可讀寫”检盼。
    把私有方法的原型聲明在“class-continuation分類”里面肯污。
    若想使類所遵循的協(xié)議不為人所知,則可于“class-continuation分類”中聲明吨枉。
    第26條:勿在分類中聲明屬性仇箱。
    所有屬性都定義在主接口里。分類是擴展類的功能东羹,而非封裝數(shù)據(jù)。不過只讀屬性可以在分類中使用忠烛。獲取方法不訪問數(shù)據(jù)属提,屬性不需要由實例變量來實現(xiàn)。

    這樣實現(xiàn)也不好美尸。所以還是遵循上面的規(guī)則冤议。
    45E0A9EF-7BD9-45BF-B55B-6442210289A5 (1).png
    第25條:總是為第三方類的分類名稱加前綴。
    分類機制通常用于向無源碼的既有類中新增功能师坎。分類中的方法是直接添加在類里面的恕酸,是咋子運行期系統(tǒng)加載分類時完成的。運行期系統(tǒng)會把分類中所實現(xiàn)的每個方法都加入類的方法列表中胯陋,會覆蓋類中的方法蕊温。多次覆蓋以最后一個分類為準(zhǔn)袱箱。以命名空間來區(qū)別各個分類的名稱與其中所定義的方法。
    給名稱加上你專用的前綴义矛,給其中的方法名加上你專用的前綴发笔。
    第24條:將類的實現(xiàn)代碼分散到便于管理的數(shù)個分類之中。
    用“分類”機制凉翻,將類代碼按邏輯劃入幾個分區(qū)中了讨。類的基本要素(屬性與初始化方法等)都聲明在“主實現(xiàn)”里。
    B6142017-3D0E-4E64-B824-8E433D087EA1.png
    這樣將類方法打散到分類中:便于調(diào)試制轰。將應(yīng)該視為“私有”的方法歸入名叫Private分類中前计,以隱藏細(xì)節(jié)。
    第23條:通過委托與數(shù)據(jù)源協(xié)議進(jìn)行對象間通信垃杖。
    委托模式:定義一套接口男杈,某對象若想接受另一個對象的委托,則需遵循此接口缩滨。以便成為其委托對象势就,而這“另一個對象”則可以給其委托對象回傳一些信息,也可以在發(fā)送相關(guān)事件時通知委托對象脉漏。

    對象把應(yīng)對某個行為的責(zé)任委托給另外一個類苞冯。令某類經(jīng)由該接口獲取其所需的數(shù)據(jù)。
    在向類提供數(shù)據(jù):數(shù)據(jù)源模式侧巨。信息從數(shù)據(jù)源流向類舅锄。而在常規(guī)委托模式中,信息則從類流向受委托者司忱。
    第22條:理解NSCopying皇忿。
    使用對象時經(jīng)常需要拷貝它。OC中通過copy方法完成坦仍。令自己的類支持拷貝鳍烁。就要實現(xiàn)NSCopying協(xié)議。

  • (id)copyWithZone: (NSZone *)zone 內(nèi)存分成不同的“區(qū)”(zone),對象會創(chuàng)建在某個區(qū)里面繁扎,每個程序只有一個區(qū):“默認(rèn)區(qū)”幔荒。
    copy方法由NSObject實現(xiàn),該方法只是以“默認(rèn)區(qū)”為參數(shù)來調(diào)用梳玫〉海“copywithzone”。
    若想使某個類支持拷貝功能提澎,只需聲明該類遵從NSCopying協(xié)議姚垃。自己寫的對象具有拷貝功能,需事先NSCopying協(xié)議盼忌。如果自定義對象分為可變版本與不可變版本积糯,同時實現(xiàn)NSCopying與NSMutableCopying協(xié)議掂墓。復(fù)制對象時決定采用淺拷貝還是森1拷貝,盡量執(zhí)行淺拷貝絮宁。

    如果對象需要深拷貝梆暮,新增一個專門執(zhí)行深拷貝的方法。
    4A876549-D0AA-4EE6-BDA9-B72F8EB2A69B.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末绍昂,一起剝皮案震驚了整個濱河市啦粹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌窘游,老刑警劉巖唠椭,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異忍饰,居然都是意外死亡贪嫂,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門艾蓝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來力崇,“玉大人,你說我怎么就攤上這事赢织×裂ィ” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵于置,是天一觀的道長茧吊。 經(jīng)常有香客問我,道長八毯,這世上最難降的妖魔是什么搓侄? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮话速,結(jié)果婚禮上讶踪,老公的妹妹穿的比我還像新娘。我一直安慰自己泊交,他們只是感情好俊柔,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著活合,像睡著了一般。 火紅的嫁衣襯著肌膚如雪物赶。 梳的紋絲不亂的頭發(fā)上白指,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機與錄音酵紫,去河邊找鬼告嘲。 笑死错维,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的橄唬。 我是一名探鬼主播赋焕,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼仰楚!你這毒婦竟也來了隆判?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤僧界,失蹤者是張志新(化名)和其女友劉穎侨嘀,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捂襟,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡咬腕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了葬荷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涨共。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖宠漩,靈堂內(nèi)的尸體忽然破棺而出举反,到底是詐尸還是另有隱情,我是刑警寧澤哄孤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布照筑,位于F島的核電站,受9級特大地震影響瘦陈,放射性物質(zhì)發(fā)生泄漏凝危。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一晨逝、第九天 我趴在偏房一處隱蔽的房頂上張望蛾默。 院中可真熱鬧,春花似錦捉貌、人聲如沸支鸡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽牧挣。三九已至,卻和暖如春醒陆,著一層夾襖步出監(jiān)牢的瞬間瀑构,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工刨摩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留寺晌,地道東北人世吨。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像呻征,于是被迫代替她去往敵國和親耘婚。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353

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