编写高质量OC代码52建议总结:27.使用“class-continuation 分类” 隐藏实现细节

类中经常会包含一些无需对外公布的方法及实例变量。OC的动态消息系统的工作方式决定了其不可能实现真正的私有。但是,我们还是应该尽量只把需要对外公布的那部分公开。
 “class-continuation 分类” 和普通的分类不同,它必须定义在主类的实现文件里。这是唯一能声明实例变量的分类,此分类没有特定的实现文件,其中的方法都应该在类的主文件里实现。
 公共接口可以定义实例变量。把他们定义在“class-continuation 分类”中可以将其隐藏,直供本类使用。即使在公共接口中将其标注为private,还是会泄露实现细节。
 “class-continuation 分类”还有一种合理的用法,就是将public接口中声明为“只读”的属性扩展为“可读写”,以便在类的内部设置其值。既能令外接无法修改对象,又能在内部按照需要管理数据,封装在类中的数据就由实例本身控制,外部代码无法修改。
 只在类的实现代码中用到的是有方法也可以声明在“class-continuation 分类”中。(新版编译器不强制要求开发者在使用方法之前必须先声明)

 对象所遵从的协议只应视为私有,可以在“class-continuation 分类”中声明。

#import "LYKPerson.h"

//class-continuation 分类中定义属性,协议,方法。扩展属性的“读写”性
@interface LYKPerson ()<NSObject>
@property (nonatomic, copy, readwrite) NSString *firstName;
@property (nonatomic, copy, readonly) NSString *lastName;

-(id)initWithFirstName:(NSString *)firstName andLastName:(NSString *)lastName;
@end


 
 总结:
 1.通过“class-continuation 分类”向类中新增实例变量。
 2.如果某属性在主接口中声明为“只读”,而类的内部又要用设置方法修改属性,可以在“class-continuation 分类”中将其扩展为“可读写”。
 3.可以把私有方法声明在“class-continuation 分类”中。
 4.如果想使类所遵从的协议隐藏,可以在“class-continuation 分类”中声明。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值