一、熟悉Objective-C

1,了解oc 語言的起源

1,oc 是c語言添加了面向?qū)ο筇匦裕瞧涑?。oc 使用動態(tài)綁定的消息結(jié)構(gòu),也就是說,在運行時才會檢查對象類型。接受一條消息后,究竟應(yīng)執(zhí)行何種代碼,由運行環(huán)境而非編譯器決定

2,理解c語言的核心概念,有助于寫好oc程序,尤其要掌握內(nèi)存模型和指針

2,在類的頭文件中盡量少引用其他頭文件

1,除非確有必要,否則不要引入頭文件。一般來說,應(yīng)在某個類的頭文件中使用‘向前聲明’來提及別的類,并在實現(xiàn)文件中引入那些類的頭文件。這樣做可以盡量降低類之間的耦合。

2, 有時無法使用‘向前聲明’, 比如要聲明某個類遵循一項協(xié)議。這樣,盡量把 ‘該類遵循的某協(xié)議’ 的這條聲明移動到分類中,如果不行,就把協(xié)議單獨放在一個頭文件中,然后將其引入。

@class Student;

3,多用字面量語法,少用與之等價的方法

1, 應(yīng)該使用字面量語法來創(chuàng)建字符串、數(shù)值、數(shù)組、字典。與創(chuàng)建此類對象的常規(guī)方法相比,這么做更加的簡明扼要。

NSNumber *num = @0;

NSString *str = @"1234";

NSArray *arr = @[ @1, @"2123", @[] ];

NSMutableArray *mArr =[@[]mutableCopy];

NSDictionary*dic = @{@"1":@"12"};

NSObject*ob = arr[1];

NSObject*ob = dic[@"1233"];

這種 使用 @XX ?的方法,也叫作,標簽指針,

如果是 NSString *str = @"1234232";

系統(tǒng)會盡可能把NSString是實現(xiàn)為單例對象。并且,上面的例子,還是個編譯器常量,就沒有創(chuàng)建NSString對象

2,用字面量語法創(chuàng)建數(shù)組或者字典是,若值中有nil,則活拋出異常。因此,務(wù)必確保值里不含nil

4,多用類型常量,少用 #define 預(yù)處理指令

1,不使用預(yù)處理指令定義常量。這樣定義出來的常量不含類型信息,編譯器只是會在編譯前據(jù)此執(zhí)行查找和替換操作。及時有人重新定義了常量值,編譯器也不會產(chǎn)生警告信心,這將導(dǎo)致應(yīng)用長程序中的常量值不一致。

2, 在實現(xiàn)文件中使用 static const 來定義 ‘ 只在編譯單元內(nèi)可見的常量 ’。由于此類常量不在全局符號表中,所以無需為其名稱加前綴

-- > 在一個類中 ?最上面的引用 #import 下面 ?定義本類的靜態(tài)常量,應(yīng)該使用 ?statci const 定義并賦值,

例如:

static const int abc = 1;

如果需要在其他類中使用(需要引用這個類的頭文件), 需要使用 extern

并且需要在名稱前加上這個類的名字作為前綴,防止和其他類混淆

例如

在.h中聲明

extern NSString * const SceneTest2Msg;

extern int const SceneTest2Value;

在.m中定義并賦值

NSString * const ?SceneTest2Msg = @"123";

int const?SceneTest2Value = 1;

注意, const的位置,常量是個指針,所以const 修飾名字

3,在頭文件中使用 extern 來聲明全局常量,并在相關(guān)文件中定義其值。中中常量要出現(xiàn)在全局符號表中,所以其名稱應(yīng)加以區(qū)隔,通常用與之相關(guān)的類名做前綴

5,用枚舉表示狀態(tài)、選項、狀態(tài)碼

1,應(yīng)該使用枚舉來表示狀態(tài)機的狀態(tài)、傳遞給方法的現(xiàn)在呢以及狀態(tài)嗎等值,給這些值起個易懂的名字

typedef enum{

PhotosAccess = 1,

CameraAccess,

MicrophoneAccess

} AccessType;

2,如果把傳遞給某個方法的選項表示為枚舉類型,而多個選項又可以同時使用,那么就想各選項定義為2的冪,以便通過按位或操作將其組合起來

typedef enum{

ViewStatueA ??????????? = 0,

ViewStatueB ??????????? = 1 << 0,

ViewStatueC ??????????? = 1 << 1,

ViewStatueD ??????????? = 1 << 2,

} ViewStatue;

self.valuestatue=ViewStatueA | ViewStatueB;

3,用 NS_ENUM 與 NS_OPTIONS宏來定義枚舉類型,并指明其底層數(shù)據(jù)類型。這樣做可以確保是用開發(fā)者所選的數(shù)據(jù)類型實現(xiàn)出來,而不會采用編譯器所選的類型

typedef NS_ENUM(NSUInteger, ConnectStatue) {

ConnectStatueDisconnected,

ConnectStatueConnecting,

ConnectStatueConnected,

};

typedef NS_OPTIONS(NSUInteger, AlignStatue) {

AlignStatueLeft ? ? ? ? ? = 0,

AlignStatueMiddle ????? = 1 << 0,

AlignStatueRight ? ? ? ? ?= 1 << 1,

};

4, 在處理枚舉類型的switch語句中不用實現(xiàn)default分支。這樣的話,加入新枚舉之后,編譯器就會提示開發(fā)者:switch語句并未處理所有枚舉

--- 》 ?刪除default 分支

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容