【禅与Objc编程艺术】

https://github.com/oa414/objc-zen-book-cn/
主要关于代码规范的,最后还讲了一些其他方面;
虽然规范从一开始就整理了好多遍,这个也看过,简单记录下;看看还是很有收获的,尤其是不注意代码规范的孩子;好评。

  • 1 条件语句:注意括号,不要省略;
    if (!error) {
        // do something;
    }
  • 2 不要使用尤达表达式:推荐使用 变量与常量比较(不要倒过来),或者使用 !(不要使用nil==obj)
 // 1
    if ([myName isEqualToString:@"说了是村长"]) {
        // do something;
    }
    
 // 2
    if (!error) {
        // do success
    }
  • 3 黄金大道:建议复杂代码不嵌套在 if 内部;
    if (error) {
  // alert info
        return;
    }
    // do something success important 
    
  • 4 复杂的表达式:if 条件复杂时,建议把条件提取出来,写成多个BOOL类型;
    if ((isConnected && currentUUID) || isManager) {
        // do something
    }
  • 5 三元运算符:使用是为了使代码更清楚!
 // 1
    NSString *result = a > b ? x : y;

 // 2
    NSString *object = @"134";
    NSString *result = object ? : @"999";
    
  • 6 错误处理:不要判断error是否存在去处理,而是判断对方法处理结果的BOOL;
    NSError *error = nil;
    if (![self doSomeThingWithError:&error]) {
        // do error thing;
    }
  • 7 switch case:建议添加括号,使用可枚举变量时建议不使用 default;
    switch (type) {
        case TestTypeOne: {
            //
            break;
        }
        
        case TestTypeTwo: {
            //
            break;
        }
            
        case TestTypeThree: {
            //
            break;
        }
    }
  • 8 枚举类型:使用 NS_ENUM(),NS_OPTION();
typedef NS_ENUM(NSUInteger, TestType) {
    TestTypeOne,
    TestTypeTwo,
    TestTypeThree
};
  • 9 通用命名:遵守apple命名规定,建议使用长的、描述性的命名
UIButton *settingButton;
  • 10 常量命名:添加相关类前缀(私有的常量可以使用k前缀),不建议使用宏定义;
static const NSTimeInterval ZOCSignInViewControllerFadeOutAnimationDuration = 0.4;
extern const NSTimeInterval  ZOCSignInViewControllerFadeOutAnimationDuration;
  • 11 方法命名:注意apple风格,注意空格,参数命名,尽量不要出现and;
+ (instancetype)alertControllerWithTitle:(nullable NSString *)title message:(nullable NSString *)message preferredStyle:(UIAlertControllerStyle)preferredStyle;

  • 12 字面量:NSString,NSDictionary,NSArray,NSNumber的创建;
    NSString *name = @"说了是村长";
    NSNumber *age = @24;
    NSArray *friend = @[@"张三",
                        @"李四",
                        @"王五"];
    NSDictionary *info = @{@"phone":@"514515",
                           @"address":@"紫金港"};
    
  • 13 类命名:使用三个大写字母作为前缀,包括公开常量,协议,通知等;
BBBViewController
BBBUserInfoChangeNotification;
  • 14 使用instancetype 代替 id 作为返回类型;
- (instancetype)initWithFrame:(CGRect)frame;
  • 15 单例:通常公开类方法就足够,不应该将单例作为对象的容器;

  • 16 属性:小写开头,避免缩写;

NSString *text;
  • 17 init 里不要使用getter setter,应该直接访问实例;

  • 18 使用setter getter 方法使用 .符号;

 // backgroundColor
    self.view.backgroundColor = [UIColor redColor];
  • 19 属性定义:nonatomic,readwrite,copy 的选择;
@property (nonatomic, strong)  NSTimer *timer ;
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) void(^testBlock)();
@property (nonatomic, assign) NSInteger age;
@property (nonatomic, weak) id<TestDelegate>delegate;
  • 20 懒加载:重写getter方法,延迟实例化;
- (NSString *)name{
    if (!_name) {
        _name = @"test";
        
    }
    return _name;
}
  • 21 使用断言;
    NSAssert([@"1" isEqualToString:@"2"], @"你确定 ?");
  • 22 私有方法:不要再私有方法前加上 “_”;

  • 23 相等性:isEqual 和 hash;对象相等 hash一定相对,反之不一定;

  • 24 Categories:方法前添加 小写前缀以及下划线;

+ (instancetype)mj_objectWithKeyValues:(id)keyValues;
  • 25 美化:空格,换行,冒号对齐;
 // 1,这个我确实一直没这么写,在考虑要不要也改成这么用;
    if (a) {
        // do
    }
    else if (b) {
        // do
    }
    else {
        // do
    }

 // 2
- (void)alertMessage:(NSString *)message {
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"提示"
                                                                             message:message
                                                                      preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"知道啦"
                                                       style:UIAlertActionStyleCancel
                                                     handler:nil];
    [alertController addAction:okAction];
    
    [self presentViewController:alertController
                       animated:YES
                     completion:nil];
    
}
  • 26 利用代码块:括号内的代码,会返回最后语句的返回值;
    NSString *content = @"1234567890";
    NSString *subString = ({
        NSString *tempString = [content substringWithRange:NSMakeRange(2, 2)];
        [NSString stringWithFormat:@"%@%@",tempString,tempString];
    });
    NSLog(@"%@",subString);// 3434
  • 27 pragma:组织代码;
#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
  • 28 warning:手动标记;
#warning i know it will be error sometime; 英语不好没办法,写中文,左边不会显示哦;
  • 29 添加注释;

  • 30 block

  • 31 委托和数据源

  • 32 继承

  • 33 AOP 面向切面编程;

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

推荐阅读更多精彩内容