代码规范 - 自用

命名

所有命名,必须英语规范。使用优秀的命名,代替或减少中文注释!!

** 类命名 **

  • 1 项目缩写大写打头
  • 2 按是否可以属于 整个项目 还是 某个模块 进行第二前缀的取舍。最后以父类或者其他结尾
  • 3 主要区分,公有类,私有类 的命名区分。
// 个人中心模块PersonCenter 有 设置界面Setting(设置界面属于整个项目唯一,而且可以脱离个人中心存在)
CZSettingViewController 而不需要 CZPersonCenterSettingViewController

// 产品模块 Product 有 产品详情界面 Detail 
CZProductDetailViewController 而不能 CZDetailViewController

** NSString 等数据:直接命名英语 **

    NSString *name = @"";
    NSInteger age = 18;
    CGFloat money = 2.5;

** NSArray / NSDictionary:使用负数形式,或者后缀Source **
注:换行!

    NSArray *friends = @[@"张三",
                         @"李四"];

    NSDictionary *famaily = @{@"father":@"爸爸",
                              @"mother":@"妈妈"};
    

    NSMutableArray *tableSource = [@[@"section1",
                                     @"section2",
                                     @"section3"] mutableCopy];
    
    NSMutableDictionary *incomeTableSource = [@{@"key1":@"value1",
                                                @"key2":@"value2",
                                                @"key3":@"value3"} mutableCopy];
    

** 各种控件:全部添加后缀(label 除外) **
注:禁止使用 view、label 等无意义的命名!

    // 用于赋值网络数据的不加后缀,用于本地显示的加后缀。命名一般参考接口!
    UILabel *nameLabel = [UILabel new]; // 不变的 
    UILabel *name = [UILabel new]; // 根据网络获取赋值的。
    UIButton *loginButton = [UIButton buttonWithType:UIButtonTypeSystem];
    UITextField *passwordField = [UITextField new];
    UIView *contentView = [UIView new];
    UITableView *productTable = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
等...

** 方法 **
根据返回与方法内容进行命名,之间多用 with、to、of、for 等连词连接。
命名尽量符合英语句子,达到不需要注释。

- (NSString *)substringWithRange:(NSRange)range;
- (BOOL)isEqualToString:(NSString *)aString;
- (NSRange)rangeOfString:(NSString *)searchString;
+ (NSTimeInterval)timeIntervalSinceReferenceDate;
+ (NSDate *)dateWithTimeIntervalSinceNow:(NSTimeInterval)secs;

- (void)addChildViewController:(UIViewController *)childController;

** 宏定义 与 常量 **
2者选择性使用。

  • 常量,命名k打头,一般加上类名为第二前缀
    保证名字唯一:尤其是提供外部使用的。
static NSString * const kProductTableName = @"testTabel";
static CGFloat const kContentViewLeftPadding = 20.;

// 或者.h.m 分开
FOUNDATION_EXTERN NSString *const kProductTableName;
NSString *const kProductTableName = @"testTabel";

// 参考 系统命名
UIKIT_EXTERN NSString *const UIKeyboardDidChangeFrameNotification;
UIKIT_EXTERN NSString *const UITextFieldTextDidChangeNotification;
#define RGB(r,g,b)     [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1.]

#define IOS9_OR_LATER ([[[UIDevice currentDevice] systemVersion] compare:@"9.0"] != NSOrderedAscending)
#define IOS9_OR_EARLIER !IOS9_OR_LATER

** 图片 **
使用 "_" 分割,不使用驼峰,命名与类的命名相似,最后需要加使用情景

navigation_back_icon
navigation_background

login_button_normal
login_button_selected

product_detail_basic_info_icon
product_detail_remark_icon

等...

格式

** 空格 与 换行 **

  • 1 属性
@property (nonatomic, copy) NSString *name;// 4个 空!
  • 2 赋值,计算,比较
self.title = @"首页";// 2个 空!
  • 3 方法
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    // do (内容上下不空行) 注意上面 3个 空!
}
  • 4 if - else
if (a == 0) {

    // do 上下 空一行

} else if (a == 1) {

    // do 上下 空一行

} else {
    // do 上 空一行,下 不空
}

注:行数小于3行,考虑美观,上下都不空行,注意空格!
  • 5 方法之间 空一行
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 2;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
     return cell;
}
  • 6 方法内部 小模块 之间 空一行
- (void)viewDidLoad {
    [super viewDidLoad];

    [self.view addSubview:self.segmentView];
    [self.view addSubview:self.contentView];
    [self.segmentView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.mas_equalTo(self.view).mas_offset(64);
        make.left.and.right.mas_equalTo(self.view);
        make.height.mas_equalTo(50);
    }];
    
    self.viewControllers = [NSMutableArray array];
    self.viewControllers = [@[self.detailViewController,
                             self.performanceViewController,
                             self.relatedDocumentViewController,
                             self.similarProductViewController] mutableCopy];
}
  • 7 所有多参数方法冒号对齐
- (void)loginWithEmployeeNo:(NSString *)employeeNo
                   orgCode:(NSString *)orgCode
             loginPassword:(NSString *)loginPassword
                   success:(ZJTClientManagerBlock)success
                   failure:(ZJTClientManagerBlock)failure {

}

类组织规范

  • 1每个类 不超过500,最好少于300(除 控件初始化 外布局代码,代码量会多一些,storyboard的就少)
#pragma mark - View lifeCycle

#pragma mark - Methods

#pragma mark - TableView Delegate

#pragma mark - Other Delegate

#pragma mark - Layout Views (处理UI布局,一般storyboard 不需要,代码布局会有大量,对应下面 Getter 也会大量)

#pragma mark - Getter Setter

  • 2 引入头文件,按照 系统框架,其他SDK,ViewController,View,Model 顺序添加。
#import "CZHomeViewController.h"
#import "CZAPPHeader.h"
#import <BaiduMapAPI_Map/BMKMapComponent.h>

#import "CZAViewController.h"
#import "CZBViewController.h"

#import "CZAView.h"
#import "CZBCell.h"

#import "CZAModel.h"
#import "CZBModel.h"
  • 3 接口 与属性:尽量,所有实例,都使用属性,并且使用懒加载方式初始化控件。
@interface CZHomeViewController ()
空!
@property (nonatomic, strong) UITableView *orderTableView;
@property (nonatomic, strong) NSMutableArray *dataSource;
空!
@end
  • 4 整理:在对View 传入ViewModel 后,对数据进行处理与赋值时,统一先处理数据,在统一赋值,分成2个小模块
-(void)bindViewModel:(id)model {

   // 可能model 返回的数据不能直接显示,所以先处理    
  
    // 然后统一赋值

}

// 其他地方类似,以免数据过于混乱
  • 5 待处理:在存在疑问或者未完成处,打warning (自己名字缩写如cz)然后描述内容,中英文即可(英文可以在warning区域直接看到)
#warning 

其他语法

  • 点语法 与 []:属性-点语法。方法-[]
view.backgroundColor = [UIColor orangeColor];
[UIApplication sharedApplication].delegate;
  • 多层嵌套:嵌套三层即以上,就应该考虑提出,按照上面集中处理,集中赋值的原则,应该合理应用嵌套。
 // 多层嵌套
    imageView.image = [[UIImage imageNamed:[self.dataSource objectAtIndex:2]] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

// 拆分
    UIImage *currentAdImage = [UIImage imageNamed:[self.dataSource objectAtIndex:2]];
    imageView.image = [currentAdImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

参考
https://github.com/oa414/objc-zen-book-cn

1

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,463评论 25 707
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,019评论 4 62
  • 《ilua》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 1...
    叶染柒丶阅读 10,523评论 0 11
  • 好热的天天空中有云有太阳也有风,就是温度降不下来,为什么呢? 连着热了这么多天,难道有什么奇异的故事要发生吗? 今...
    Expe阅读 250评论 2 1
  • “财上平如水,人中直似横”。 陈寿廷在青岛染厂的原材料——坯布,受到日本人藤井的控制,藤井借助日本的军事势力...
    玄奇阅读 254评论 0 0