第27条:使用“class-continuation分类”隐藏实

2018-09-23  本文已影响8人  MrSYLong

class-continuation分类和普通分类不同,没有名字,必须定义在其所接续的类的实现文件中,是唯一能声明实例变量的分类。

EOCPerson类的class-continuation分类:

// 实现文件中
@interface EOCPerson()
// 可以定义方法、属性、实例变量
@end
class-continuation分类用法一:

无需对外公开但应该具有的方法、实例变量,可以使用class-continuation分类。(虽然运行时系统的工作决定不可能实现真正的私有方法与实例变量)

@interface EOCPerson() {
    // 定义实例变量 在class-continuation分类
    NSString *_anInstanceVariable;
}

@end

@implementation EOCPerson {
    // 定义实例变量 在实现块 与定义在class-continuation分类等效
    int *_anotherInstanceVariable;
}
@end
class-continuation分类用法二:

在编写Objective-C++代码时,实现文件扩展名可能为.mm,.mm扩展名表示编译器应该将此文件按照Objective-C++编译,否则无法正确引入C++文件。

应该在实现文件加载C++文件,在class-continuation分类中声明C++实例变量。

理由:如果在一个类头文件加载C++文件,那么所有引入此类的文件都必须编译为Objective-C++才行,他们也都引入了C++文件,所以这样做不合适。

class-continuation分类用法三:

在公共接口声明为“只读”的属性扩展为“可读写”,属性的内存管理语义不能改变,必须相同。

class-continuation分类用法四:

类的私有方法可以声明在class-continuation分类中,这样可以把类里面所含的相关的方法都统一描述于此。
现在的编译器已经不强制在使用方法之前必须先声明。

class-continuation分类用法五:

若对象所遵从的协议不想为人所知,则可在class-continuation分类中声明。

上一篇下一篇

猜你喜欢

热点阅读