[21]Effective Objective-C 2.0【15-17】

第三章:接口与API设计

第十五条:用前缀避免命名空间冲突

Objective-C没有类似其他语言那样的命名空间机制(namespace),比如说PHP中的

这就会导致当你不小心实现了两个相同名字的类,或者把两个相对独立的库导入项目时而他们又恰好有重名的类的时候该类所对应的符号和Meta Class符号定义了两次。所以很容易产生这种命名冲突,让程序的链接过程中出现出现重复的符号造成报错。

为了避免这种情况,我们要尽量在类名,以及分类和分类方法上增加前缀,还有一些宏定义等等根据自己项目来定吧

第十六条:提供“全能初始化方法”

如果创建类的实例的方式不止一种,那么这个类就会有多个初始化方法,这样做很好,不过还是要在其中选定一个方法作为全能初始化方法,剩下的其余的初始化方法都要调用它,这样做的好处是以后如果初始化的逻辑更改了只需更改一处即可,或者是交给子类覆写的时候也只覆写这一个方法即可~

举个例子来说:可以看一下NSDate的实现在NSDate.h中NSDate类中定义了一个全能初始化方法:

- (instancetype)initWithTimeIntervalSinceReferenceDate:(NSTimeInterval)ti NS_DESIGNATED_INITIALIZER;

其余的类似初始化方式定义在NSDate (NSDateCreation) 分类中

- (instancetype)initWithTimeIntervalSinceNow:(NSTimeInterval)secs;

- (instancetype)initWithTimeIntervalSince1970:(NSTimeInterval)secs;

- (instancetype)initWithTimeInterval:(NSTimeInterval)secsToBeAdded sinceDate:(NSDate *)date;

在NSDate文档中有一条:If you want to subclass NSDate to obtain behavior different than that provided by the private or public subclasses, you must do these things:然后其中要做的有一步就是

Override [initWithTimeIntervalSinceReferenceDate:
](apple-reference-documentation://hcslylvSCo), one of the designated initializer methods`

这个是我们组织代码过程中应该学习的地方!

第十七条:实现 description 方法

调试程序时,经常需要打印并查看对象信息。一种办法是编写代码把对象的全部属性都输出到日志中。不过最常用的做法还是像下面这样:

NSLog(@"object = %@", object);

这样直接打印我们的对象它会输出 ,这并不是我们想要的,所以当我们重写description的时候才可能满足我们调试的需求。

- (NSString *)description {
    return [NSString stringWithFormat:@"%@ : %@, %@", [self class], self, @"你需要的属性"];
}

若想在调试时打印出更详尽的对象描述信息,则应实现 - (NSString *)debugDescription;方法,再与po命令一起使用配合调试。

你可能感兴趣的:([21]Effective Objective-C 2.0【15-17】)