类别

@interface ClassName ( CategoryName )

// method
declarations

@end

Category在iOS开发中使用非常频繁。尤其是在为系统类进行拓展的时候,我们可以不用继承系统类,直接给系统类添加方法,最大程度的体现了Objective-C的动态语言特性。

注意事项

1:类别是类的扩展,只可以声明方法,不可以声明变量。并且,类别的方法优先级较高,可覆盖原类方法。

2:类别的方法中,不可以调用super方法。--类别的局限

3:category 方法不能覆盖于同一class 的其它 category 中的方法。因为不法预知他们的加载优先顺序,就可能在编译时出错。

使用类别:

1。对框架提供类的扩展(没有源码,不能修改)。

2。 不想生成一个新的子类的情况下,比如对 NSArray 的扩展。

3。 方便做项目管理,可以将一份源码在多个地方共享或者做方法版本管理、多人协作开发、用本地版本替换公共版本实现。

扩展:

1:某些情况下,我们需要声明一个@property,它对外是只读的(readonly),而对内是可读写的(readwrite),这时,可以通过Extensions实现

@interface BaseClass : NSObject
@property (readonly) NSString *privateString;
@end // .m
@interface BaseClass()
@property (readwrite) NSString *privateString;
@end @implementation BaseClass
@synthesize privateString;
//...
@end

2:使编辑器可以更好的验证类的私有的方法或者变量



@interface BaseClass()

- (void)doSomethingPrivate;

@end

@implementation BaseClass
//...
@end
 

最新文章

  1. ListView控件
  2. Something about Wake-sleep
  3. 攻城狮在路上(壹) Hibernate(十四)--- Hibernate的检索方式(下)
  4. Codeforces Perfect Pair (JAVA)
  5. [CareerCup] 13.5 Volatile Keyword 关键字volatile
  6. Greedy:Stripes(POJ 1826)
  7. Spring测试工具返回Application
  8. UI:target-action设计模式、手势识别器
  9. 【WinForm】C# 采用POST登录京东
  10. ubuntu15.10英文系统中文输入法配置 fcitx
  11. ListView random IndexOutOfBoundsException on Froyo
  12. 【化繁为简】非前端开发者的福音---CSS的预处理语言 Less&Sass
  13. Vue源码后记-其余内置指令(2)
  14. python进程和线程(六)
  15. poj 3268 Silver Cow Party(最短路dijkstra)
  16. Python——Flask框架
  17. 【转】Android动态破解微信本地数据库(EnMicroMsg.db)
  18. Unicode字符需要几个字节来存储?
  19. sass 变量的声明 嵌套
  20. [数据结构]最大流之Ford-Fulkerson算法

热门文章

  1. iis站点下发布多个vue项目
  2. 初识python: xml 操作
  3. Fiddler Everywhere简单使用
  4. c# - 按引用内存地址传参 和 按输出传参 的具体使用
  5. PowerShell 管道符之Where-Object的使用方法
  6. mysql数据库主从复制教程
  7. react中state与setstate的使用
  8. AI系统——梯度累积算法
  9. vue 自动生成菜单
  10. 生产环境上,哨兵模式集群Redis版本升级应用实战