最近学习oc,在翻代码的时候发现不少.m文件中有这样一句话html
@interface xxxxx ()学习
@end spa
.h中已经对接口进行定义为何在.m中还有这样一句话呢,查了下。.net
http://www.cnblogs.com/winkyao/archive/2012/04/02/2429664.html设计
//in Header.h
@interface Header{}
@end
//in Header.m
@interface Header()
@end
这是个很是常见的设计,为何在.m文件里面,也要出现一个接口声明呢?code
这很相似于一个分类,但其实它不是一个分类(或者你也能够叫它anonymous Catogary),其实这是一个叫作class extension的东西orm
说说区别:htm
1. 首先 extension 能够重声明一个数据成员,好比一个数据成员是只读的,你能够把它变成可读写blog
2. 分类根本不一样意你扩展数据成员,它只扩展一些方法, 可是在Clang/LLVM 2.0 compiler 之后, extension能够这么作.接口
3. 有时候,你若是但愿实现一些不公开的方法供本身使用,那你能够把它放入.m的extension里面.那么这些接口都是不公开的了