编写高质量iOS与OS X代码的52个有效方法上

第一章 熟悉Objective-C

1.了解起源

oc 使用“消息结构”,运行时执行的代码由运行环境决定,而函数调用的语言,由编译器决定。

在oc,有部分变量不算oc对象,如CGRect.

2.在类的头文件中尽量少引入其他头文件

将引入头文件的时间尽量延后,可以减少类的使用者所需引入的头文件的数量。

一般的做法是:

#Person.h

@class A

#Person.m

#import A

但是如果你的类继承自某个类,或者有代理方法,就必须放在.h


3.多使用字面量语法

这个语法方便好用,但是我还是有点不习惯。一般数组,字典的我用它。

如 NsArray *animals = @[@"cat",@"dog"];常规写法我就不写了。

取数组下标: NSString *dog = animals[1];

NSDictionNary *dic = @{@"dog":@"first",@"cat":@"second"};

NSString *dog = dic[@"first"];

局限性:字面量的元素不能为nil,而且除了字符串以为必须为Foudation对象。并且都是不可变的 ,如需可变 后面需要加 mutableCopy.

4.多用类型常量,少用#define

预处理不含类型信息,在.m中加入static const,定义只在编译单元可见。

5.用枚举表示状态,选项

第二章:对象,消息,运行期

6.理解属性

nonatmic,atomic,非原子性。表示线程不安全。atomic有锁机制。但是耗费性能。所以,ios中还是用nonatmic

assign,weak 区别:assign修饰常量。weak 会 set nil.

strong,copy.一般字符串用copy.

其他的我就不说了。

7.对象内部尽量直接访问实例变量

10.关联属性

12.理解消息转发机制

消息转发分为2个阶段:1.征询接受者,所属的类看其是否能够动态添加方法,以处理当前这个@selector,这叫做动态方法解析,2.看看有没有其他对象能处理这条消息,若有,则运行期系统会把消息转给那个对象,于是消息转发过程结束。否则,启动完整的转发机制,运行期系统会把与消息有关的全部细节封装到NSInvocation.再给接收者最后一次机会,令其设法解决当前未处理的消息。

动态方法解析:

对象在收到无法解读的消息后,会调用:

+(BooL)resloveInstanceMethod:(SEL)selector

备援接收者

-(id)forwardingTargetForSelctor:(SEL)selector


完整的消息转发机制

创建NSInvocation对象,把未处理的消息有关的全部细节都封于其中,此对象包含选择子,目标,及参数。

实现此方法时,若发现某调用操作不应由本类处理,则需调用超类的同名方法。直至NSObject.如果最后调用了NSObject方法,那么该犯法会继续调用“doesNotRecongnizeSelector”.

-(void)forwardInvoation:(NSInvocation*)invocation


编写高质量iOS与OS X代码的52个有效方法上_第1张图片

你可能感兴趣的:(编写高质量iOS与OS X代码的52个有效方法上)