13. iOS開發小細節--OC篇

weixin_33728268發表於2018-05-08

  今天down下來一個demo,看到其作者的一些程式碼寫法的習慣,倒不是說人家寫的不好,最起碼功能沒問題好吧。只是有一些小細節,我不是很喜歡,總結我的習慣,以及平時瀏覽的blog,今天寫一寫我覺得應該注意的問題。

這篇文章,長期維護,只求程式碼更加完美(加粗)!
1.不需要存在的程式碼

1.1 由IDE自動生成的函式

像這種自動生成的函式,沒有用到的話 就刪掉吧。
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

1.2 遇到一些函式的引數需要傳Block作回撥函式使用,若不需要回撥就別硬傳 ^{}

[self presentViewController:alert
                   animated:YES
                 completion:^{}];
像這種的,不需要做後續處理,你直接寫個 nil 多好

1.3 對於你要操作的物件,不要做一些多餘的、無意義的判斷

比如說,我要對一個 UIView 設定 frame ,像這種必須保證例項物件必須存在才能做的操作,就沒必要再去做判斷了
 if (view) {
        view.frame = rect
 }
2.程式碼規範

2.1 巨集定義的名稱要全部用大寫字母

2.2 儘量用字面量語法來優化我們的Object-C語法

[dictionary setObject:object forKey:key];
改成
dictionary[key] = object;

NSString * string = [dictionary objectForKey:key];
改成
NSString * string = dictionary[key];

相信每個同學都會有一個 常量.h檔案
2.3 數字啥的常量,就別用巨集定義了,用static const

#define CONTROLLER_FROM_A 1
改成
static const int kControllerFromA = 1;

2.4 寫完2.1突然想起來 用作key的字串最好用 k 開頭

static NSString * const CCControllerFromA = @"CCControllerFromA";
改成
static NSString * const kCCControllerFromA = @"kCCControllerFromA";
3. 良好的編碼習慣

3.1 一些常用的UI方面的常量,用巨集定義表示

// cell高度
#ifndef CC_NAVIBAR_HEIGHT
#define CC_NAVIBAR_HEIGHT  (CC_ABOVE_IOS(7) ? 64:44)
#endif

//1點的線寬
#ifndef CC_SINGLE_LINE_WEIGHT
#define CC_SINGLE_LINE_WEIGHT     (1 / [UIScreen mainScreen].scale)
#endif

3.2 函式中一些有意義的量變為常量

// 這裡的5000數字用 static const CGFloat 表示一下,要不加個註釋啊。
if (width > 5000) {
    width = 5000;
}

// 10提出來,kMaxCount = 10
if (mutebelArray.count > 10) {
    NSRange removeRange = NSMakeRange(10, mutebelArray.count - 10);
    [mutebelArray removeObjectsInRange:removeRange];
}

3.3 巧用三目運算

if (picture.length > 0) {
    [self.imgView sd_setImageWithURL:[NSURL URLWithString:picture]];
} else {
    [self.imgView sd_setImageWithURL:[NSURL URLWithString:default]];
} 
改成
NSString *imgURLStr = picture.length > 0 ? picture : default;
[self.imgView sd_setImageWithURL:[NSURL URLWithString:imgURLStr]];

3.4 字面量陣列和字面量字典使用的時候要注意 nil

// 這裡的a,b,c,d中任何一個是nil,都是crash掉,需要注意!
NSDictionary * dictionary = @{
                              @"a" : a,
                              @"b" : b,
                              @"c" : c,
                              @"d" : d,
                              };

3.5 對於一些狀態或者型別的進行判斷的時候,最好把對應的狀態或者型別寫成enum

3.6 在 .h中如果用到了某個clasee如果不是必需,用@class替代#import

相關文章