类扩展

之前在看代码的时候一直不明白在.m文件中为什么有@interface,为什么要在.m文件中写@property,而不是写在.h文件中,今天重新读《Objective -C基础教程》,才发现这种写法是类扩展(class extention)。是一种特殊的类别,我们知道类别是不可以增加新的实例变量的,然而类扩展可以。

  • 类扩展不需要名字。
  • 可以添加新的实例变量。
  • 可以将只读权限修改成可读写的权限。
  • 创建的数量不限。
例如:
</pre><pre name="code" class="cpp">@interfece Things:NSObject
@property (assign) NSInteger things1;
@property (readonly,assign) NSInteger things2;

-(void) resetAllValues;
@end 

这个类包含了两个属性和一个方法。在.m文件中
@interface Things()
{
    NSInteger things4;
}

@property (readwrite,assign) NSInteger things2;
@property (assign) NSInteger things3;
@end

这看起来像是在定义一个类,只不过没有继承父类。我们所做的是获取Things类,并通过添加私有属性和方法来扩展它,这就是它被成为类扩展的原因。仔细看things2属性,我们在.h文件中定义过了,在.m文件中我们修改了它的读写权限。将它标记为readwrite。这样编译器就会自动生成setter方法了。不过它是只能在这个类中访问的私有方法,在公共接口中则只有getter方法。我们还添加了私有属性,things3,它只可以在这个类的内部使用,此外还添加了一个名为thing4的实例变量,它同样是私有的。
    那么我们为什么要做这些事情,面向对象编程的一个特征就是信息的隐藏,你只会把用户需要看到的信息展示出来,而内部细节不需要。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值