美文网首页iOS开发
OC中分类与扩展

OC中分类与扩展

作者: miliPolo | 来源:发表于2016-03-09 23:11 被阅读654次

首先类别跟扩展都可以添加新的方法,扩展或者说是一种默认的类别,不需要添加名称形如@interface NSObject(),而类别写法如此@interface NSObject(Setter),不同点在于,扩展可以添加新的属性,并且扩展一般是添加在.m文件中的,有一点需要注意的是,扩展中声明的函数需要在implement中实现,否则会报错

类别的作用有下面几点:

(1)将类的实现分散到多个不同文件或多个不同框架中。

(2)创建对私有方法的前向引用。

(3)向对象添加非正式协议。

缺点有下面几点:

(1)无法向类中添加新的实例变量,类别没有位置容纳实例变量。

(2)名称冲突,即当类别中的方法与原始类方法名称冲突时,类别具有更高的优先级。类别方法将完全取代初始方法从而无法再使用初始方法。解决办法:无法添加实例变量的局限可以使用字典对象解决

注意:

(1) Category的方法不一定非要在@implementation中实现,也可以在其他位置实现,但是当调用Category的方法时,依据继承树没有找到该方法的实现,程序则会崩溃。

(2) Category理论上不能添加变量,但是可以使用@dynamic来弥补这种不足。

static char*PersonNameKey ="PersonNameKey";

//name是你在头文件中的属性名称,PersonNameKey就相当于是一个keyId了

- (void)setName:(NSString*)name {

objc_setAssociatedObject(self,PersonNameKey, name,OBJC_ASSOCIATION_COPY_NONATOMIC);

}

- (NSString*)name {

return objc_getAssociatedObject(self,PersonNameKey);

}

demo可以参见https://github.com/miliPolo/CategoryAddPropertyByRuntime

相关文章

  • iOS中分类和继承的区别

    在OC中,扩展一个类的方式有两种:继承与分类。 继承与分类最大的区别是,一般情况下,分类不能扩展属...

  • 分类、类扩展与继承

    在OC中,扩展一个类的方式有两种,继承和分类。 分类(Category) 概念 分类(Category),是OC中...

  • Swift5.0 - day7-扩展、访问控制、内存管理

    一、扩展(Extension) 1.1、扩展介绍Swift中的扩展,有点类似于OC中的分类(Category)扩展...

  • OC中的分类与扩展

    定义是什么就不说了... 他们能干嘛? 分类: 1、声明私有方法 2、功能分解,当一个类很庞大的时候,可以...

  • iOS-Swift-扩展

    1. 扩展(Extension) Swift中的扩展,有点类似于OC中的分类(Category) 扩展可以为枚举、...

  • [Swift5.1] 18-扩展

    扩展(Extension) Swift中的扩展,有点类似于OC中的分类(Category) 扩展可以为枚举、结构体...

  • 扩展

    扩展(Extension) Swift中的扩展,有点类似于OC中的分类(Category) 扩展可以为枚举、结构体...

  • Swift扩展&协议&访问控制

    一、扩展 1、扩展简介: Swift中的扩展,类似于OC中的分类(Category)。 2、扩展可以为枚举、结构体...

  • swift扩展

    扩展 Swift中的扩展,有点类似于OC中的分类(Category) 扩展作用 扩展可以为枚举、结构体、类、协议添...

  • 分类、类扩展的区别

    分类、类扩展的区别 分类(Category):概念分类(Category)是OC中的特有语法,它是表示一个指向分类...

网友评论

    本文标题:OC中分类与扩展

    本文链接:https://www.haomeiwen.com/subject/lvfzkttx.html