OC的category和extension

  1. category(分类)

    • 作用:不用直接更改「父」类(也不用继承)的情况下添加方法(比如没有源码时); 另外在apple sdk中很多.h文件中(比如NSRegularExpression.h)有分类的影子, 它们将不同类型的方法做了一个分类, 可读性大提高,很不错. 还有网友说category可用于多人合作开发一个大型的类,个人觉得它的出现可能有考虑到合作开发,但更适合给没有源码的类添加辅助性小功能的情况下使用,而不适合一起合作开发一个类。因为一个类的设计会考虑属性、实例变量等类元素,而category不能直接创建它们。
    • 优点:没有类源码也能添加方法。
    • 局限:1.不能创建实例变量(自然属性也无法创建);2.名称冲突,名称冲突时category的优先级更高,会替代原有类的方法,可添加一个前缀来避免冲突。
    • 注意:非要走不寻常的路、给category添加属性与实例变量,该怎么办?可通过runtime.h 中 objc_getAssociatedObject / objc_setAssociatedObject 来访问和生成关联对象。通过这种方法来模拟生成属性。用处不大,有兴趣的盆友自己google/baidu。
    • 创建:和创建类类似New File >>> Objective-C category.
  2. extension(扩展)

    • 作用:集中管理类私有的实例变量和方法,如果一个属性对外是只读对内可读写,也可以用extension实现。因为@interface 行的语法书写和 category 有点像,所以有人说extension是个匿名的category,但它们完全不是一会事。应用场景和实现过程完全不同。
    • 创建: 通过New File >>> Objective-C extension来创建,会发现只有一个.h文件,因为实现都写在.m文件里了。其实创建UIViewController时,.m文件里的@interface …@end就是一个extension。
    • 注意:方法私有化除用extension外,还可以直接在.m文件时写实现,不过这样会损失可读性,特别是方法名叫多的时候。
  3. category和extension的区别

    • 都是OC中对类进行扩展的技术;
    • category:适合给没有源码的类添加方法,不能创建实例变量(自然属性也不可以);
    • extension:适合集中管理类的私有方法,可创建私有的属性和实例变量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值