代碼組織

來自 Mattt Thompson

code organization is a matter of hygiene (代碼組織是衛(wèi)生問題)

利用代碼塊

一個 GCC 非常模糊的特性笙蒙,以及 Clang 也有的特性是堕虹,代碼塊如果在閉合的圓括號內(nèi)的話囚衔,會返回最后語句的值
NSURL *url = ({
    NSString *urlString = [NSString stringWithFormat:@"%@/%@", baseURLString, endpoint]; 
    [NSURL URLWithString:urlString];
});

Pragma

Pragma Mark

<pre>#pragma mark - 是一個在類內(nèi)部組織代碼并且?guī)椭惴纸M方法實現(xiàn)的好辦法狭归。 我們建議使用 #pragma mark - 來分離:
</pre>

· 不同功能組的方法
· protocols 的實現(xiàn)
· 對父類方法的重寫
- (void)dealloc { /* ... */ }
- (instancetype)init { /* ... */ }
#pragma mark - View Lifecycle (View 的生命周期)
- (void)viewDidLoad { /* ... */ }
- (void)viewWillAppear:(BOOL)animated { /* ... */ }
- (void)didReceiveMemoryWarning { /* ... */ }
#pragma mark - Custom Accessors (自定義訪問器)
- (void)setCustomProperty:(id)value { /* ... */ }
- (id)customProperty { /* ... */ }
#pragma mark - IBActions 
- (IBAction)submitData:(id)sender { /* ... */ }
#pragma mark - Public
- (void)publicMethod { /* ... */ }
#pragma mark - Private
- (void)zoc_privateMethod { /* ... */ }
#pragma mark - UITableViewDataSource
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { /* ... */ }
#pragma mark - ZOCSuperclass
// ... 重載來自 ZOCSuperclass 的方法
#pragma mark - NSObject
- (NSString *)description { /* ... */ }

上面的標(biāo)記能明顯分離和組織代碼炕泳。你還可以用 cmd+Click 來快速跳轉(zhuǎn)到符號定義地方昭殉。 但是小心,即使 paragma mark 是一門手藝辕翰,但是它不是讓你類里面方法數(shù)量增加的一個理由:類里面有太多方法說明類做了太多事情夺衍,需要考慮重構(gòu)了。

關(guān)于 pragma

http://raptureinvenice.com/pragmas-arent-just-for-marks/ 有很好的關(guān)于 pragma 的討論了喜命,在這邊我們再做部分說明沟沙。
大多數(shù) iOS 開發(fā)者平時并沒有和很多編譯器選項打交道。一些選項是對控制嚴(yán)格檢查(或者不檢查)你的代碼或者錯誤的壁榕。有時候矛紫,你想要用 pragma 直接產(chǎn)生一個異常,臨時打斷編譯器的行為牌里。
當(dāng)你使用ARC的時候颊咬,編譯器幫你插入了內(nèi)存管理相關(guān)的調(diào)用。但是這樣可能產(chǎn)生一些煩人的事情二庵。比如你使用NSSelectorFromString來動態(tài)地產(chǎn)生一個 selector 調(diào)用的時候贪染,ARC不知道這個方法是哪個并且不知道應(yīng)該用那種內(nèi)存管理方法,你會被提示 performSelector may cause a leak because its selector is unknown(執(zhí)行 selector 可能導(dǎo)致泄漏催享,因為這個 selector 是未知的).
如果你知道你的代碼不會導(dǎo)致內(nèi)存泄露,你可以通過加入這些代碼忽略這些警告

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"[myObjperformSelector:mySelector withObject:name];
#pragma clang diagnostic pop

注意我們是如何在相關(guān)代碼上下文中用 pragma 停用 -Warc-performSelector-leaks 檢查的哟绊。這確保我們沒有全局禁用因妙。如果全局禁用痰憎,可能會導(dǎo)致錯誤。
全部的選項可以在 The Clang User's Manual 找到并且學(xué)習(xí)攀涵。

忽略沒用使用變量的編譯警告

告訴你申明的變量它將不會被使用铣耘,這種做法很有用。大多數(shù)情況下以故,你希望移除這些引用來(稍微地)提高性能蜗细,但是有時候你希望保留它們。為什么怒详?或許它們以后有用炉媒,或者有些特性只是暫時移除。無論如何昆烁,一個消除這些警告的好方法是用相關(guān)語句進行注解吊骤,使用 #pragma unused():

- (NSInteger)giveMeFive
{ 
  NSString *foo; 
  #pragma unused (foo) 
  return 5;
}

現(xiàn)在你的代碼不用任何編譯警告了。注意你的 pragma 需要標(biāo)記到問題代碼之下静尼。

明確編譯器警告和錯誤

編譯器是一個機器人白粉,它會標(biāo)記你代碼中被 Clang 規(guī)則定義為錯誤的地方。但是鼠渺,你總是比 Clang 更聰明鸭巴。通常,你會發(fā)現(xiàn)一些討厭的代碼會導(dǎo)致這個問題拦盹,但是暫時卻解決不了奕扣。你可以這樣明確一個錯誤:

- (NSInteger)divide:(NSInteger)dividend by:(NSInteger)divisor
{
   #error Whoa, buddy, you need to check for zero here! 
   return (dividend / divisor);
}

類似的,你可以這樣標(biāo)明一個警告

- (float)divide:(float)dividend by:(float)divisor
{
   #warning Dude, don't compare floating point numbers like this!
   if (divisor != 0.0) {
     return (dividend / divisor); 
   }
   else { 
     return NAN;
   }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末掌敬,一起剝皮案震驚了整個濱河市惯豆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌奔害,老刑警劉巖楷兽,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異华临,居然都是意外死亡芯杀,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門雅潭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來揭厚,“玉大人,你說我怎么就攤上這事扶供∩冈玻” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵椿浓,是天一觀的道長太援。 經(jīng)常有香客問我一铅,道長色乾,這世上最難降的妖魔是什么闻蛀? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任主巍,我火速辦了婚禮,結(jié)果婚禮上碱蒙,老公的妹妹穿的比我還像新娘荠瘪。我一直安慰自己,他們只是感情好赛惩,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布哀墓。 她就那樣靜靜地躺著,像睡著了一般坊秸。 火紅的嫁衣襯著肌膚如雪麸祷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天褒搔,我揣著相機與錄音阶牍,去河邊找鬼。 笑死星瘾,一個胖子當(dāng)著我的面吹牛走孽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播琳状,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼磕瓷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了念逞?” 一聲冷哼從身側(cè)響起困食,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎翎承,沒想到半個月后硕盹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡叨咖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年瘩例,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片甸各。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡垛贤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出趣倾,到底是詐尸還是另有隱情聘惦,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布誊酌,位于F島的核電站部凑,受9級特大地震影響露乏,放射性物質(zhì)發(fā)生泄漏碧浊。R本人自食惡果不足惜涂邀,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望箱锐。 院中可真熱鬧比勉,春花似錦、人聲如沸驹止。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽臊恋。三九已至衣洁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間抖仅,已是汗流浹背坊夫。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留撤卢,地道東北人环凿。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像放吩,于是被迫代替她去往敵國和親智听。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

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