Object-c 一些代碼規範

來源:互聯網
上載者:User

點引用是地道的Objective-C 2.0的風格。它被使用於簡單的屬性set、get操作,但對象的其它行為不
應該使用它。


Setters中對NSString進行copy
永遠不要僅僅retain一個字串。這避免了調用者在你不知道的情況下對字串作出了修改。不要作出那樣的假設:你接受的對象是一個NSString對象而不是NSMutableString對象。

- (void)setFoo:(NSString *)aFoo {
[foo_ autorelease];
foo_ = [aFoo copy];

}總結:接受NSString作為參數的setter,應該copy它所接受的字串。

這從邏輯上遵守了NSString的setter必須使用copy而不是retain。


實現委託模式的類應該:

擁有一個名為delegate_的成員變數來引用委託。
因此,訪問器方法應該名為delegate和setDelegate:。
delegate_對象不應該被retained。

不要直接比較BOOL變數與YES/NO。不僅僅這影響可讀性,結果可能與你想的不同。

使用nil的檢查來檢查應用程式的邏輯,而不是避免崩潰。Objective-C運行時會處理向一個nil的對象
發送訊息的情況。如果方法沒有傳回值,就沒關係。


總結:不要拋出Objective-C異常,但準備從第三方的調用或者系統調用捕捉異常。


當使用Objective-C++寫基於棧的對象的代碼時,如果拋出Objective-C異常,對象不會被清
理。(解構函式)


dealloc中對象被釋放的順序應該與他們在@interface中聲明的順序一致


A u to lea se之後reta in

當給一個變數賦值新的對象時,必須先釋放掉舊的對象以避免記憶體泄露。有一些正確的方法來處理
它。我們選擇autorelease之後retain的方法因為事實證明它更少地出錯。注意大的迴圈會填滿
autorelease pool,並且可能效率上會差一點,但這點折衷我們認為是可以接受的。

- (void)setFoo:(GMFoo *)aFoo {
[foo_ autorelease]; // Won't dealloc if |foo_| == |aFoo|
foo_ = [aFoo retain];

}

總結:給對象賦值時遵守autorelease之後retain的模式。


當建立臨時對象時,在同一行使用autolease,而不是在同一個方法的後面語句中使用一個單
獨的release。

不要調用NSObject類的類方法new,也不要在子類重寫。相反,你應該使用alloc和init方法來
建立並初始化一個對象。



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.