美文网首页iOS之家selectoriOS开发
iOS - 类扩展与分类的区别

iOS - 类扩展与分类的区别

作者: Mitchell | 来源:发表于2015-08-08 16:07 被阅读29996次
作者:Mitchell 

类扩展 (Class Extension也有人称为匿名分类)##

  • 作用:
    • 能为某个类附加额外的属性,成员变量,方法声明
    • 一般的类扩展写到.m文件中
    • 一般的私有属性写到类扩展
  • 使用格式:
@interface Mitchell()
//属性
//方法
@end
  • 与分类的区别

    • 分类的小括号中必须有名字

@interface 类名(分类名字)
/方法声明/
@end
@implementation类名(分类名字)
/方法实现/
@end
```
- 分类只能扩充方法,不能扩展属性和成员变量(如果包含成员变量会直接报错)。
- 如果分类中声明了一个属性,那么分类只会生成这个属性的set、get方法声明,也就是不会有实现。
- 举例说明:如果我们分别在,类扩展与分类中添加了两个属性,

类扩展与类别1.1.png
接下来在初始化方法中分别赋值,
类扩展与类别1.1.png
大家会看到在为在分类中所声明的属性textOne赋值的时候,崩溃了,那么我们来查看一下崩溃的原因:
类扩展与类别1.3.png
意思是说,我们所创建的对象中并没有textOne这个属性。也就是说虽然我们再类别中声明属性不会报错,但是@property并没有自动为我们设置的属性生成set、get方法
  • 再说一下我们为什么不能包含类的 .m文件,因为这样会重复包含另一个类的实现文件。

相关文章

  • iOS面试题09- 基础篇

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

  • iOS - 类扩展与分类的区别

    类扩展 (Class Extension也有人称为匿名分类)## 作用:能为某个类附加额外的属性,成员变量,方法声...

  • iOS - 类扩展与分类的区别

    类扩展 (Class Extension也有人称为匿名分类) 作用: 能为某个类附加额外的属性,成员变量,方法声明...

  • 类别(Category)与类扩展 (Extension)的区别

    类别(Category)与类扩展 (Extension)的区别 iOS 类别和扩展(Categories和Exte...

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

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

  • iOS中分类和继承的区别

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

  • iOS基础题

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

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

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

  • iOS知识基础篇

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

  • IOS知识基础篇

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

网友评论

  • feng_dev:很棒很棒
  • 知行合一认知升级:这写了一半,后边怎么没了。
    再说一下我们为什么不能包含类的 .m文件,因为这样会重复包含另一个类的实现文件。
  • 大号鱼骨头:我想问个问题,这俩加载的时机是怎么样的?
  • fe4a5edc73de:类别给属性添加set和get方法,不是也可以吗?
    SmallTwo:@花生儿 关联也应该没成员变量把?
    花生儿:@老男孩19910717 如果不关联的话,没有成员变量。
  • d70f931e452e:我新建的类拓展文件只有一个.h文件,没有.m文件,请问你是如何实现类拓展并且可以在.m文件中添加自定义的实现的。
    知行合一认知升级:分类要新建.h .m 文件。扩展不用新建文件,在原来的.m文件中添加@interface就行了。当然 ,也可以 单独生成一个.h文件。
    Mitchell:@黑白色2577 你确定你建的是category啊
  • 侭情显現:大神,怎么给简书文章布局
    Mitchell:@侭情显現 搜markdown语法
  • niujieno1:写的不错
  • 7a946bf5d2ca:楼主 分类里可以利用关联来增加属性
    IT小青龙:@大博哥 同意您的观点,我也是在研究mj的刷新控件的时候才知道原来可以通过runtime去关联增加一个额外的属性,当时看到后疑惑了半天,去查了相关资料才恍然大悟
    7a946bf5d2ca:@Mitchell 我就是觉得应该严谨一点,我以前学的时候别人都是高速我分类里不能增加属性,结果被误导了好久,偶然才知道能利用runtime怎么加属性,惊呆了
    Mitchell:@大博哥 是可以通过runtime去增加属性。这里只是为了区分而区分。非常抱歉没有写清楚。

本文标题:iOS - 类扩展与分类的区别

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