iOS APP 开发 OC 第二十二天,Extension

tags: OC 30 day

延展: Extension

是一个特殊分类,所以延展也是类的一部分。extension 没有名字只有声明,没有实现。与本类共享一个实现。

Extension的语法

语法:
@interface 本类名()

@end

没有实现。和本类共享一个实现。

为类添加Extension的步骤

只有一个.h文件。文件名称:本类名_取得文件名.h。
这个文件中只有Extension的声明。
@interface Person()

@end


新增一个OC文件,File Type点选 Extension。

Extension 的基本使用

Extension 的本质是一个分类,作为本类的一部分。只不过是一个特殊的分类,没有名字。延展只有声明,没有单独的实现,合本类共享一个实现。

Extension 与 class 的区别

分类有名字,Extension没有名字,是一个匿名的分类。每一个分类都有单独的声明和实现,而Extension只有声明,没有单独的实现,和本类共享一个实现。分类只能新增方法,而延展中任意成员都可以写。分类当中可以写@property 但是只会生成 getter setter的声明。Extension中写@property 会自动生成私有属性,也会生成getter setter的声明实现。

Extension的应用场景

为类写一个私有的 @property 。

生成的getter,setter方法只能在类的内部访问,不能在外部访问。
其实,我们可以想: @property生成私有属性,生成getter setter的实现,不要声明。

@implementation Person{    int _age;}- (void)setAge:(int)age{    _age = age;}- (int)age{    return _age;}@end

我们可以在 @implementation 里面声明一个变数,再赋予他getter与setter。但是这样又回到了原点,我们想要利用 @property简化getter与setter的流程。

那我们该怎么做? Extension

@interface Person()@property(nonatomic,assign)int age;@end@implementation Person@end

这个操作有实现,会实现在哪里呢? @implementation 。

Extension 在100%的情况下不会独佔一个文件。都是将延展直接写在本类的实现文件当中。这个时候,写在延展中的成员,就相当于这个类的私有成员,只能在本类的实现中访问,外部不能访问。
如果想要为类写一个私有属性,虽然我们可以定义在@implementation之中,但是请不要这么写,这样很不规範。写一个Extension,定义在Extension当中。
也建议声明写在延展当中,实现写在本类的实现当中。提供代码的阅读性。
如果想要为类写一个私有的 @property 就直接写在Extension就可以了。

Extension 天生就是私有化类的成员的

如果类的成员只希望在类的内部访问,那么就将其定义在延展中。
如果类的成员允许被外界访问,定义在本类的interface之中。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章