Effective-OC2.0之熟悉OC (OC起源、头文件引入、字面量语法、类型常量、枚举)

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就不会提醒。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,312评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,898评论 18 399
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 9,400评论 1 10
  • 狐狸 手提裙裾,拾阶而上 夜,隐遁在月迷津渡的时分 门扉的缝隙,漏出 箫音的哀婉,直抵眉心 是谁 曾用纤纤十指,将...
    宁木紫菀阅读 2,985评论 0 5
  • 愈加懒惰,愈加消极,会掉入懊悔过去和幻想未来的陷阱中。时间累积会产生更加强烈的负罪感和自我否定让人越来越焦虑 是的...
    飞鸢的小世界阅读 4,114评论 1 4