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分类“中声明。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Win_77

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值