13. iOS開發小細節--OC篇
今天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
相關文章
- iOS開發細節iOS
- iOS開發之OC篇(3)—— NSArray、NSMutableArrayiOS
- 開發小細節系列之一
- iOS開發小記-基礎篇iOS
- iOS開發——OC編碼規範iOS
- 小細節
- iOS開發基礎篇--NSNotificationCenter使用小結iOS
- iOS 開發選擇OC還是Swift?iOSSwift
- iOS基礎細節iOS
- iOS節拍器開發iOS
- Vue、Javascript小細節VueJavaScript
- iOS開發中使用OC和swift的對比iOSSwift
- iOS開發:網頁JS與OC互動(JavaScriptCore)iOS網頁JSJavaScript
- iOS開發小tipiOS
- iOS 開發小技巧iOS
- 小程式開發所遇的問題以及一些小細節
- iOS開發UI篇--仿射變(CGAffineTransform)使用小結iOSUIORM
- Flutter混合開發—iOS篇FlutteriOS
- ios 開發UI篇—UITextViewiOSUITextView
- 混合開發實戰:App里拉起一個小程式(IOS篇)APPiOS
- iOS中使用UICollectionView的細節iOSUIView
- 沈向洋等人論文詳解微軟小冰,公開研發細節微軟
- iOS中JS和OC相互呼叫實現混合開發(JavaScriptCore)iOSJSJavaScript
- 提高javascript效能的小細節JavaScript
- oracle並行的小細節Oracle並行
- Flutter外掛開發---iOS篇FlutteriOS
- ios開發UI篇--UILabeliOSUI
- iOS開發之網路篇iOS
- iOS開發小技巧合集iOS
- Android 字型修改,所有的細節都在這裡 | 開篇Android
- Path for iOS設計細節賞析iOS
- 【iOS】iOS開發編碼規範小結iOS
- [iOS][OC] 開發利器:控制器傳送門VCPicker(附demo)iOS
- 機器級程式的小細節
- 一個小的技術細節
- iOS 藍芽開發·基礎篇iOS藍芽
- iOS 開發(二) MVC 架構篇iOSMVC架構
- iOS 開發(三) MVVM 架構篇iOSMVVM架構