zoukankan      html  css  js  c++  java
  • Effective OC : 1-5

    1,了解Objective-C语言的起源:

    OC为C语言的超集,为C加入了面向对象的特性。

    要理解C中的指针和内存模型。


    2.在类文件里尽量少引入其它头文件:

    引入过多头文件。将借口暴露,添加耦合度。这显然是不可取的。

    对于一个类B的声明中调用其它的类A,假设头文件里内容仅仅是简单引用对象,而并不须要知道其全部的接口细节时。不应该引入类A的头文件。而使用forward declaring方式来向前声明该类:

    @class A

    而假设实现中必须知道接口细节时,再将头文件引入,这样,将引入头文件的时机尽量延后。仅仅在确定须要时才引入。

    循环引用会引起死循环。

    协议即接口,显然应该放在一个单独的头文件里。

    对于不太重要的属性,能够将其放在 class-continuation中。减少在头文件里的内容,以减少编译时间和减少彼此的依赖程度。


    3.多用字面量语法,少用与之等价的方法。

    对于Foundation框架中的NSString、NSNumber、NSArray、NSDictionary类,对于起创建,一般使用字符串字面量string literal:

    NSString *someString = @"a String";
    NSNumber *number = @{x * y };
    NSArray *animals = @[@"cat",@"dog",@"mouse"];
    NSDictionary *personData = @{@"firstName":@"matt",
    @"lastname":@"Galloway",
    @"age":@28};
    NSString *str =  personData[@"lastname"];
    须要注意的是,对NSDictionary和NSArrary创建时,不应该有nil即空值,由于字面量语法实际上是一种语法糖的语法,即对一定语句的缩减版本号,而这里调用的是不定參数的构造函数,相当于运行下面方法:

    NSArray *animals = [NSArray array WithObjects:cat,dog,mouse,nil];
    由于在不定參数的函数中以nil结尾。所以假设使用字面量语法。在參数中使用nil就会抛出异常。


    使用字面量语法。所用的对象必须是属于Foundation。就是仅仅能对所说的4个,而本身这些对象都是不可变的。

    对于起可变版本号即带mutable。仅仅能自行复制一份,例如以下:

    NSMutableArray *mutable =  [@[@1,@2,@3] mutableCopy] ;

    4.多用类型常量,少用#define预处理指令:

    C中的陋习。在C++和OC中都有了常量后。就应该使用常量了。

    简单来说,长处是带类型。方便检測,加 不会缩小命名空间。

    不打算公开某常量的话。就应该将其定义在实现文件里。

    使用const static来修饰静态常量。const表示常量。static表示该变量的仅在本编译单元可见,不带static就是全局变量了。

    使用extern来修饰全局常量。跟C++和C一样,如今头文件里声明。再在实现文件里定义。针对指针时,放在*号前表示地址是常量,放在*后表示地址指向内容是常量。


    5.用枚举表示状态、选项、状态码:

    OC中的枚举,编译器自己主动为枚举分配编号,一般从0開始依次递增。实现枚举所用的数据类型取决于编译器。定义枚举变量的方式非常蠢:

    enum ABCEnum{
     a,
     b,
     c,
    };
    enum ABCEnum en = a;
    而OC中能够省略这个enum,通过typedef:

    typedef enum ABCEnum ABCEnum;

    这样,之后就能够使用枚举名来取代完整的enum ABCEnum了。

    C++11中能够指明何种“底层数据类型”来保存枚举类型的变量。这样就能够提前声明枚举变量。而在不能指定底层数据类型时,无法向前声明枚举类型的原因是,编译器不清楚底层数据类型的大小,所以无法为变量分配空间,也就无法声明变量。

    向前声明指定数据类型例如以下:

    enum ABCEnum : NSInteger;
    当然,在定义枚举时。指定数据类型,也是在枚举名后加入冒号加数据类型。

    枚举中能够不是哟个默认的0,自定设定的值,而之后的值就从自定的值開始依次递增:

    enum ABCEnum : NSInteger{
     A ,
     B = 1000,
     C ,
    };
    而一般在使用枚举类型的变量定义选项时,选项是彼此组合的,也就是用到按位或操作 | 时。就要设置枚举值都是合理移位后的值:

    enum ABCEnum{
     A = 1 << 0,
     B = 1 << 1,
     C = 1 << 2,
    };
    这样能够通过或操作来组合多个选项,方便快捷。
    在switch中使用枚举时:

    switch(abc){
    A:
    break;
    B:
    break;
    C:
    break;
    }
    
    
    OC中的switch能够省略case.








  • 相关阅读:
    课堂练习
    《你的灯亮着吗》第二篇总结
    四则运算2程序
    《你的灯亮着吗》第一篇总结
    四则运算2
    阅读计划
    四则运算
    《人月神话》读后感
    软件演化
    软件测试
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5398084.html
Copyright © 2011-2022 走看看