本文主要是介绍Objective-C中使用“class-continuation分类“隐藏实现细节,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
"class-continuation分类"是什么?
"class-continuation分类"和普通的分类不同,它必须定义在其所接续的那个类的实现文件里。
此分类没有特定的实现文件,其中的方法都应该定义在类的主实现文件里。与其他分类不同,"class-continuation分类"没有名字。比如,有个类叫做EOCPerson,其"class-continuation分类"写法如下:
@inrtface EOCPerson ()
{//可以声明实例变量
}
@end
为什么需要有这种分类?
其重要之处在于,这是唯一能声明实例变量的分类。把实例变量定义在"class-continuation分类"或"实现块"中可以将其隐藏起来,只供本类使用。
即便在公共接口里将实例变量标注为private,也还是会泄漏实现细节。
比如,可以将一个秘密类的实例声明在"class-continuation分类"中:
//EOCClass.h
#import <Foundation/Foundation.h>@interface EOCClass : NSObject
@end//EOCClass.m
#import "EOCClass.h"
#import "EOCSecretClass.h"@interface EOCClass ()
{EOCSecretClass *_secretInsrance;
}
@end@implementation EOCClass
//Methods here
@end
"class-continuation分类"有几种用法?
1、上面提到的用于实例变量的声明。因为会泄漏相关类的信息。
2、编写Objective-C代码时,C++的类必须完全引入,因为编译器要完整地解析其定义方能得知实例变量的大小。在这些情况下,使用"class-continuation分类"会很方便。不然引用此类的其他类,都要写成Objective-C++的形式了。
3、将public接口中声明为"只读"的属性扩展为"可读写",以便在类的内部设置其值。
我们通常不直接访问实例变量,而是通过设置访问方法来做,因为这样能够触发"键值观察"通知,其他对象有可能正在监听此事件。
出现在"class-continuation分类"或其他分类中的属性必须同类接口里的属性具备相同的特质,不过,其”只读“状态可以扩充为”可读写“。
这样做很有用,既能令外界无法修改对象,又能在其内部按照需要管理其数据。
4、只会在类的实现代码中用到的私有方法也可以声明在”class-continuation分类“中。
@interface EOCPerson ()-(void)p_privateMethod;@end
虽然没有强制开发者在使用方法之前必须先声明,然而这样做通常还是有好处的,因为这样可以把类里面所含的相关方法都统一在一起,使类的代码更容易读懂。
5、若对象所遵从的协议只应视为私有,则可以在”class-continuation分类“中声明。
这篇关于Objective-C中使用“class-continuation分类“隐藏实现细节的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!