博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Effective OC : 1-5
阅读量:6914 次
发布时间:2019-06-27

本文共 2043 字,大约阅读时间需要 6 分钟。

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.

转载地址:http://fbacl.baihongyu.com/

你可能感兴趣的文章
Date的简单介绍
查看>>
Windows/Mac跑起XDAG源码
查看>>
C语言字符串操作函数
查看>>
富文本编辑器summernote使用
查看>>
马哥2016全新Linux+Python高端运维班第三周作业
查看>>
linux后台进程启动springboot
查看>>
Seo界神话 360好搜
查看>>
JavaScript闭包
查看>>
datatables服务器端分页
查看>>
用PL/SQL Developer导出表数据的时候,窗口一闪而过解决办法
查看>>
杨辉三角
查看>>
将 Log4j 配置文件放在项目外面
查看>>
nginx日志切割
查看>>
以太坊Dapp终极教程——如何构建一个完整的全栈去中心化应用(二)
查看>>
客户端bug测试贴
查看>>
java web 开发 编码问题详解
查看>>
python写的发邮件的小程序!
查看>>
Linux入门(四)
查看>>
org.tinygroup.dbfilter
查看>>
实战 MDT 2012(三)---捕获镜像
查看>>