編寫高質量代碼-OC 第5章 實現

3三、使用類別把類的實現拆分紅不一樣的文件編程

  • 一、利用類別機制,可將同一個類的實現,由一個常規的實現文件(.m)拆分紅多個實現文件(.m)
  • 二、把同一個類的實現文件(.m)拆分紅多個實現文件(.m),適合類的實現文件大多比較龐大。
  • 三、把同一個類的實現文件(.m)拆分紅多個實現文件(.m),拆分的標準可能是以同類型或同業務類型等來做爲參照。

3四、明智地使用內省可以使程序更加高效和健壯框架

  • 一、內省是對象揭示本身做爲一個運行時對象的詳細信息的一種能力,這些詳細信息包括對象在繼承樹上的位置,對象是否遵循特定的協議,以及是否能夠相應特定的消息。
  • 二、內省有助於避免錯誤地進行消息派發、錯誤地假設對象相等,以及類此的問題。
  • 三、NSObject協議和類定義了不少內省方法,用於查詢運行時信息,以便根據對象的特徵進行識別,例如isEqual方法,可用來比較對象。
  • 四、在Cocoa框架的全部isEqualToType:方法中,nil都不是正當的參數,這些方法的實如今接收到nil參數時會拋出異常。然而爲了向後兼容,Cocoa框架中的isEqual:方法能夠接收nil值,在這種狀況下返回NO。

3五、儘可能使用不可變形對象而非可變性對象指針

  • 一、儘可能不要把可變對象存儲到集合對象中,不然容易致使存儲的可變對象被破壞或變成無效。
  • 二、在開銷上,可變對象比不可變對象要大,由於可變對象必須動態管理管理一個可變的輔助存儲——在必要時分配或解除分配內存塊,因此比相應的不可變版本效率低。
  • 三、不能肯定對象是否可變,則將它當成不可變處理。

3六、利用複合能巧妙地把兩個類或兩個對象融合對象

  • 一、在OOP編程中有兩個技術用於描述類與類或對象與對象之間的關係,一個是繼承,一個是複合
  • 二、複合式經過在類中聲明一個指向另外一個類對象的指針做爲實例對象,從而將這兩個類進行復合。
  • 三、使用new建立對象的時候,實際發生了兩個步驟:第一個步驟,爲對象分配內存,也就是說對象得到存儲其實例變量的內存塊;第二步,就是自動調用init方法,初始化對象使其處於可用狀態。沒有被初始化的指針都使nil。
  • 四、在Objective-C中全部對象之間的交互都是經過指針實現的。

3七、使用類擴展來隱藏實現的細節繼承

  • 一、類擴展,從必定程度而言,可稱爲匿名類別。
  • 二、利用類擴展隱藏私有信息。
  • 三、若是打算將「私有」的方法或屬性用來選擇相關的類,能夠在單獨的頭文件中聲明類擴展,並把其導入到須要它的源文件中。

3八、使用內聯塊應注意避免循環引用內存

  • 一、在內聯塊中能直接引用self,但要注意避免致使循環引用。
  • 二、避免因爲在內聯塊中直接引用self致使的循環引用,較好的方式,引進弱引用來防護。
  • 三、在非內聯塊不能直接訪問self,只能經過將self看成參數傳遞到塊中,才能使用,而且此時的self只能經過setter或getter方法訪問其屬性,不能使用句點式方法。

3九、利用類別把方法添加到現有的類
40、經過強弱引用來管理對象的是全部權get

  • 一、__weak對面是__strong。一樣,沒必要明確指定__strong的,由於它是默認的。
  • 二、父對象應該__strong引用子對象,子變量應該__weak引用父對象。
  • 三、只要該變量是在範圍內,變量就會保持對象的__strong的引用,或直至它被從新分配給另外一個對象或nil。
  • 四、對一些不支持__weak引用的類,可經過Unsafe Unretained引用來暗度陳倉。
  • 五、使用__weak引用來避免循環retain。
相關文章
相關標籤/搜索