iOS代碼規(guī)范

iOS代碼規(guī)范

命名規(guī)范

1.0 對于常量的命名最好在前面加上字母k作為標(biāo)記. 如:

static const NSTimeInterval kAnimationDuration = 0.3;

定義作為NSDictionary或者Notification等的Key值字符串時(shí)加上const關(guān)
鍵字, 以防止被修改. 如:

NSString *const UIApplicationDidEnterBackgroundNotification

Tips:

<pre><code>
I. 若常量作用域超出編譯單元(實(shí)現(xiàn)文件), 需要在類外可見時(shí), 使用
extern關(guān)鍵字, 并加上該類名作為前綴. 如 extern NSString *const
PGThumbnailSize
II.全局常量(通知或者關(guān)鍵字等)盡量用const來定義. 因?yàn)槿绻褂煤甓?br> 義, 一來宏可能被重定義. 二來引用不同的文件可能會(huì)導(dǎo)致宏的不同. P.S.
對于#define也添加一下前綴k(其實(shí)有點(diǎn)強(qiáng)迫癥, 哈哈...)
</code></pre>

2.0 對于變量的命名規(guī)范
Tip:iOS命名兩大原則是:可讀性高和防止命名沖突(通過加前綴來保證). Objective-C 的命名通常都比較長, 名稱遵循駝峰式命名法.

  • 實(shí)例
    <pre><code>
    //字符串聲明后綴以Str結(jié)尾
    NSString *phoneStr;
    //錯(cuò)誤示例
    NSString *str1;//不應(yīng)以數(shù)字作為變量后綴,變量聲明應(yīng)具有一定的可識(shí)別程度
    </pre></code>

  • 變量后綴

<pre><code>
<>NSString; ----- Str,
NSMutableString ---- StrM;
NSArray; ----- Arr,
NSMutableArray ----- ArrM;
NSDictionary ---- Dic,
NSMutableDictionary ----DicM,
UILabel ----lab,
UIButton ----btn,
UITableView ---- tab,
UICollectionView ---- CollView,
UITextFiled ----TF,
UITextView ---- TV,
UIView ---- View,</pre></code>

  • 枚舉變量的聲明規(guī)范

建議使用基于Objective -c的枚舉羽莺,更易讀赞弥,枚舉里面的類型盡量使用全部的大寫屏镊,區(qū)分的話可用下劃線后單詞進(jìn)行區(qū)別

<pre><code>
typedef NS_ENUM(NSInteger, UIViewAnimationTransition) {
UIViewAnimationTransitionNone,
UIViewAnimationTransitionFlipFromLeft,
UIViewAnimationTransitionFlipFromRight,
UIViewAnimationTransitionCurlUp,
UIViewAnimationTransitionCurlDown,
};
</pre></code>

不建議使用基于C的枚舉

<pre><code>
typedef enum : {
CameraModeFront,
CameraModeLeft,
CameraModeRight,
} CameraMode
</pre></code>

條件判斷

<li> 單層的判斷語句不建議使用if else 邏輯語句</li>

不建議 <pre><code>
if (條件)else {
.....
}</pre></code>

建議使用三目運(yùn)算符
<pre><code>result = object ? : [self createObject]; </pre></code>

<li>嵌套判斷 </li>

<pre><code>
if (!user.UserName) return NO;
if (!user.Password) return NO;
if (!user.Email) return NO;
return YES;</pre></code>

不應(yīng)該:實(shí)例

<pre><code>
BOOL isValid = NO;
if (user.UserName)
{
if (user.Password)
{
if (user.Email) isValid = YES;
}
}
return isValid;</pre></code>

判斷條件的編寫

<li> 判斷條件在后 </li>
<pre><code>if(self.name = nil) </pre></code>

<li>錯(cuò)誤寫法</li>
<pre><code>if(nil = self.name)</pre></code>

初始化方法

<li> 初始化變量時(shí)候盡量使用字面量語法進(jìn)行初始化</li>
<pre><code>
NSArray *names = @[@"Brian", @"Matt", @"Chris", @"Alex", @"Steve"];
NSDictionary *productManagers = @{@"iPhone" : @"Kate", @"iPad" : @"Kamal"};
NSNumber *shouldUseLiterals = @YES;
NSNumber *buildingZIPCode = @10018;</pre></code>

第一個(gè)好處是簡潔, 第二個(gè)好處是可以防止初始化進(jìn)去nil值造成crash

方法的寫法

<li>方法里面參數(shù)過多的時(shí)候</li>

<pre><code>

  • (void)registerUserName:(NSString *)userName
    password:(NSString *)password
    email:(NSString *)email
    {
    // to do...
    }
    </pre></code>

Block的循環(huán)使用問題

<li>block內(nèi)部使用弱引用</li>

<pre><code>
__weak typeof(self) weakSelf = self;
dispatch_block_t block = ^{
[weakSelf doSomething]; // weakSelf != nil
// preemption, weakSelf turned nil
[weakSelf doSomethingElse]; // weakSelf == nil
};
</pre></code>

以上那樣寫并不完美只厘,block體里面的self是weak的, 所以就有可能在某一個(gè)時(shí)段self已經(jīng)被釋放了, 這時(shí)block體里面再使用self那就是nil
解決方法很簡單, 就是在block體內(nèi)define一個(gè)strong的self, 然后執(zhí)行的時(shí)候判斷下self是否還在, 如果在就繼續(xù)執(zhí)行下面的操作, 否則return或拋出異常
<pre><code>
__weak typeof(self) weakSelf = self;
myObj.myBlock = ^{
__strong typeof(self) strongSelf = weakSelf;
if (strongSelf) {
[strongSelf doSomething]; // strongSelf != nil
// preemption, strongSelf still not nil
[strongSelf doSomethingElse]; // strongSelf != nil
}
else {
// Probably nothing...
return;
}
};
</pre></code>

避免龐大的xib

可分為多個(gè)模塊進(jìn)行涌献,xib在進(jìn)行編譯的時(shí)候會(huì)把所有的資源文件加載一次

賦值語句

賦值語句等號(hào)左右各加一個(gè)空格

錯(cuò)誤示例
<pre><code>NSString *str=@"1";
</pre></code>
正確示例
<pre><code>NSString *str = @"1";</pre></code>

未完待續(xù)......

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末描孟,一起剝皮案震驚了整個(gè)濱河市愧薛,隨后出現(xiàn)的幾起案子酌壕,更是在濱河造成了極大的恐慌掏愁,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卵牍,死亡現(xiàn)場離奇詭異果港,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)糊昙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門辛掠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人释牺,你說我怎么就攤上這事萝衩。” “怎么了没咙?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵猩谊,是天一觀的道長。 經(jīng)常有香客問我祭刚,道長牌捷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任涡驮,我火速辦了婚禮暗甥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘捉捅。我一直安慰自己撤防,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布锯梁。 她就那樣靜靜地躺著即碗,像睡著了一般焰情。 火紅的嫁衣襯著肌膚如雪陌凳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天内舟,我揣著相機(jī)與錄音合敦,去河邊找鬼。 笑死验游,一個(gè)胖子當(dāng)著我的面吹牛充岛,可吹牛的內(nèi)容都是我干的保檐。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼崔梗,長吁一口氣:“原來是場噩夢啊……” “哼夜只!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蒜魄,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤扔亥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后谈为,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體旅挤,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年伞鲫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了粘茄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡秕脓,死狀恐怖柒瓣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吠架,我是刑警寧澤嘹朗,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站诵肛,受9級(jí)特大地震影響屹培,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜怔檩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一褪秀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧薛训,春花似錦媒吗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至介袜,卻和暖如春甫何,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背遇伞。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工辙喂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓巍耗,卻偏偏與公主長得像秋麸,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子炬太,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評論 2 348

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

  • iOS編程規(guī)范0規(guī)范 0.1前言 為??高產(chǎn)品代碼質(zhì)量,指導(dǎo)廣大軟件開發(fā)人員編寫出簡潔灸蟆、可維護(hù)、可靠亲族、可 測試次乓、高效...
    iOS行者閱讀 4,445評論 21 35
  • 概要 Objective-C是一門面向?qū)ο蟮膭?dòng)態(tài)編程語言,主要用于編寫iOS和Mac應(yīng)用程序孽水。關(guān)于Objectiv...
    DreamMmMmM閱讀 1,153評論 0 7
  • 這里有些關(guān)于編碼風(fēng)格Apple官方文檔票腰,如果有些東西沒有提及,可以在以下文檔來查找更多細(xì)節(jié): The Object...
    Loki9527閱讀 394評論 0 0
  • 前言 最近突發(fā)奇想女气,想到之前公司培訓(xùn)的代碼規(guī)范杏慰,所以簡單的整理一下,希望能對大家有所幫助炼鞠。 正文 部分一 1. 命...
    SwordDevil閱讀 554評論 0 1
  • --force --nodeps 安裝舊版本方法 rpm https://www.cnblogs.com/huac...
    AbnerSky閱讀 392評論 2 3