美文网首页
面试题:分类和扩展的区别

面试题:分类和扩展的区别

作者: 阳光的影子v | 来源:发表于2016-09-09 12:07 被阅读91次

分类(Category)

分类的作用是动态的(分类是在运行期决议的)为一个已经存在的类添加方法,即使你不知道这个类的源码。

注意

1.分类中不能为类添加实例变量,如果添加实例变量会直接报错:

 Instance variables may not be placed in categories

因为在运行期,对象的内存布局已经确定,如果添加实例变量就会破坏类的内部布局,这对编译型语言来说是灾难性的。

2.分类中可以使用属性@property,但是只会生成setter、getter方法的声明(不会生成实例变量以及setter、getter方法的实现)。当调用setter、getter方法时,可以编译通过,但是运行时会报错:

unrecognized selector sent to instance

因为setter、getter方法没有实现。
实现方法:
通过建立关联引用的方式,实现setter、getter方法。
3.分类中增加的方法如果与原有类的方法重名,则分类中的方法会覆盖原有类的方法,因为分类的优先级更高。

扩展(Extension)

扩展可以看作是匿名的分类。
扩展可以为一个已经存在的类添加方法和属性。
扩展在编译期决议。扩展一般用来隐藏类的私有信息,你必须有一个类的源码才能为一个类添加扩展。

category 和 extension 的区别

  • 相同点:都可以为一个类添加方法
  • 不同点:Category只能用于添加方法,不能用于添加成员变量。extension中声明的方法和添加的成员变量是私有的,只有主implement能调用,外部的类无法调用。

相关文章

  • iOS面试题09- 基础篇

    《2018 iOS面试题系列》 1、category 和 extension 的区别 分类有名字,类扩展没有分类名...

  • iOS底层原理20:类扩展与关联对象底层原理探索

    在前面的文章中,我们分析了类和分类的本质和加载过程,本文主要来分析类扩展和关联对象 【面试题】类扩展与分类的区别 ...

  • iOS类扩展 与 关联对象 底层原理

    本文的主要目的是针对类加载的一个扩展,主要讲类拓展和分类的底层实现原理 【面试题】类扩展 与 分类 的区别 1、c...

  • iOS基础题

    一、category 和 extension 的区别?(分类和扩展的区别) 1,分类有名字,类扩展没有名字,是一种...

  • 面试题:分类和扩展的区别

    分类(Category) 分类的作用是动态的(分类是在运行期决议的)为一个已经存在的类添加方法,即使你不知道这个类...

  • iOS知识基础篇

    category 和 extension 的区别 分类有名字,类扩展没有分类名字,是一种特殊的分类 分类只能扩展方...

  • IOS知识基础篇

    category 和 extension 的区别 分类有名字,类扩展没有分类名字,是一种特殊的分类 分类只能扩展方...

  • 1. iOS面试题基础篇

    category 和 extension 的区别 分类有名字,类扩展没有分类名字,是一种特殊的分类 分类只能扩展方...

  • iOS面试题-基础篇

    category 和 extension 的区别 分类有名字,类扩展没有分类名字,是一种特殊的分类 分类只能扩展方...

  • iOS面试题--基础篇

    category 和 extension 的区别 分类有名字,类扩展没有分类名字,是一种特殊的分类 分类只能扩展方...

网友评论

      本文标题:面试题:分类和扩展的区别

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