美文网首页
Effective-OC2.0之熟悉OC (OC起源、头文件引入

Effective-OC2.0之熟悉OC (OC起源、头文件引入

作者: 沉默着欢喜丶 | 来源:发表于2018-04-02 19:34 被阅读0次

OC的起源

OC为C添加了面向对象的特性。OC是用的是动态绑定的消息结构,不像是C的函数调用,所以在编译的时候不会在乎对象的类型,只有在运行时才会检查对象类型。
在接受一条消息之后,究竟应该执行什么代码,是由运行时环境决定的而不是编译器来决定。

关于引入头文件

除非有必要,否则不要引入头文件。一般来说,应该在h文件里面使用向前声明:@class,来提及别的类,然后在实现文件里面再引入那些类的头文件。
有时无法使用向前声明,比如遵循某个协议,需要引入头文件,尽量放在实现文件里面去遵循,实在不行,就将协议单独放在一个h文件里面,然后单独将其引入。

尽量使用字面量

尽量使用字面量来创建对象。字面也支持数据运算。例如:

CGFloat x = 1.1; 
CGFloat y = 2.2;
NSNumber *z  = @(x + y);

在字面量数组上,

NSArray *a = [NSArray arrayWithObjects:x,y,z,nil];
NSArray *b =  @[x,  y,  z];

使用第一种去创建,如果x和z都指向了有效的对象,但是y是nil,那么在执行完之后不会崩溃,但是数组a只有一个x对象,因为arrayWithObjects方法会依次处理各个参数,直到发现nil,终止处理。 但是如果用字面量,会直接崩溃。
这种特性同样适用于字典的 dictionaryWithObjectsAndKeys

尽量多用类型常量,少用#define预处理命令

static、extern、const

static 和 extern 用来设置变量的作用域。
const:设置变量只能是可读,不可以被修改。

static: 用static修饰的变量,在它所修饰的作用域里面只会有一份内存,在作用域中修改每次都会从上次修改的基础上进行修改。
static修饰的变量算作静态全局变量,在作用域中可以算是全局变量,对作用域外没有任何影响,在作用域外可以定义一个相同名字的变量。
但是如果是在appdelegate或者别的单例中定义的非静态全局变量,名字必须是唯一的。

extern:用extern修饰的变量,凡是引用了这个变量所在的头文件,都可以使用这个变量。
一般的用法是定义一个h文件,添加几个变量,不进行初始化,然后在需要用到的地方去初始化使用,算作全局变量的一种用法。

混搭使用:

static NSString *const indentifier = @"hello";
static和const 使用,相当于本文件中的一个宏定义,不可以在外部使用。

extern和const一块使用,一般是在h文件中:

extern NSString *const hello;

在m文件中

NSString *const hello = @"world";

这样可以在外部文件中调用,且不需要知道内部的value值,只需要知道key值。一般用于通知。

枚举

多使用枚举来表示各种状态、传递给方法的选项以及状态码等值。给一个通俗易懂的名字。
如果把传递给某个方法的选项作为枚举类型,而多个选项又可同时使用,那么就可以将各选项的值定义为2的幂,以便通过按位或操作将其组合起来。
在处理枚举类型的switch中不要实现default分支,这样的话当增加了新的枚举类型,编译器就会提醒。但是如果加了default就不会提醒。

相关文章

网友评论

      本文标题:Effective-OC2.0之熟悉OC (OC起源、头文件引入

      本文链接:https://www.haomeiwen.com/subject/bbwxhftx.html