.h
@interface Things : NSObject
@property (assign) NSInteger things1;
@property (readonly, assign) NSIngteger things2;
- (void)resetAllValues;
@end
.m
@interface Things ()
{
NSInteger thing4;
}
@property (readwrite, assign) NSInteger things2;
@propery (assign) NSInteger things3;
@end
添加私有属性和方法来扩展它。这也就是它被称为类扩展的原因。
仔细看一下things2属性,已经在头文件中定义过这个属性。那在extension中对它做了什么?
改变了它的读写权限,标记为readwrite,这样编译器就会生成setter方法了,不过它是只能在这个类中访问的私有方法了,而公共接口中,则只有getter方法了。
还添加了私有属性things3,它只可以在这个类的内部使用。
另外还添加了一个名为thing4的实例变量,它同样也是私有的。
为什么要做这些事情呢?
面向对象编程的一个特征就是信息隐藏。你只会把用户需要看到的展示出来,其他的则不需要。比如内部的实现的细节。这些技术可以帮助你实现这样的细节。
Extension是什么
Extension有一种说法叫『匿名分类』,因为它很像分类,但没有分类名。严格来说要叫类扩展
Extension的作用是将原来放在.h中的数据放到.m中去,私有化,变成私有的声明。
Extension是在编译的时候将所有的数据都合并到类中去
Extension一般用来做什么
声明私有属性
声明私有方法
声明私有变量
Extension的特点以及Extension与Category的区别
编译时决议(在编译的时候就将扩展的所有数据合并到类中去)
只以声明的形式存在,多数情况下寄生于宿主类的.m中
不能为系统类添加扩展
网友评论