美文网首页
iOS--总是记不住的分类和扩展

iOS--总是记不住的分类和扩展

作者: 我是一个大胖墩 | 来源:发表于2019-02-13 10:14 被阅读0次

分类(category)

作用:可以在不修改原来的类的基础上,为其扩展方法,常用于为系统自带的类扩展方法。

举例:

想要收集每个页面的启动时间。

问题一:

项目中有很多页面了,一个一个的添加方法,即浪费了时间,当新增页面的时候又要添加方法,麻烦。

解决方法:

页面都继承于UIViewController,既然想要在每个页面都执行的代码,就可以写在父类中。

问题二:

UIViewController是官方类,只能调用,而不能修改实现。

解决方法:

使用分类(category)。

分类中能写什么?

分类中只能添加“方法”,而不能增加成员变量,(在runtime层面可以通过关联对象为分类添加成员属性)如果一定要在分类中添加成员变量,可以通过getter,setter进行添加

分类中可以访问原来类中的成员变量,但是只能访问@protect和@public形式的变量,如果想要访问本类中的私有变量,只能通过方法去访问。

在本类和分类有相同的方法时,优先调用分类的方法再调用本类的方法。

分类(category)和类扩展(extension)的关系

1.类扩展(extension)是category的一个特例,有时候也被称为匿名分类,作用是为一个类添加私有的成员变量和方法。

2.类扩展能写点啥?和分类不同,类扩展即可以声明成员变量又可以声明方法。

3.类扩展听上去很复杂,但其实我们很早就认识他了。你记得继承自UIViewController的ViewController和继承自NSObject的类有什么不同么?

@interface ViewController()//这就是类扩展的写法

@end

4.类扩展可以定义在.m文件中,这种扩展方式中定义的变量都是私有的,也可以定义在.h文件中,这样定义的代码就是共有的,类扩展在.m文件中声明私有方法是非常好的方式。

7.类扩展中添加的新方法,一定要实现。category中则没有这种限制。

category

专门用来给类添加新的方法,除非通过runtime,否则不能给类添加成员属性,因为如果可以添加成员变量,添加的成员变量没有办法初始化。

extension

可以给类添加成员属性,但是是私有变量;可以添加方法,但也是私有方法。

引用资料: 深入浅出理解分类(category,类别,类目)和类扩展(extension,匿名类别)

相关文章

  • iOS--总是记不住的分类和扩展

    分类(category) 作用:可以在不修改原来的类的基础上,为其扩展方法,常用于为系统自带的类扩展方法。 举例:...

  • iOS--分类和扩展

    类别与类扩展的区别 ①类别中原则上只能增加方法(能添加属性的的原因只是通过runtime解决无setter/get...

  • 分类和扩展

    1.分类1.1将一个复杂的类分成若干个模块儿,其中每个模块儿被称为一个分类1.2分类的作用是降低耦合度1.3语法1...

  • 分类和扩展

    1.分类 分类的作用: 可以为原类添加方法(也可以通过runtime的objc_setAssociatedObje...

  • 分类和扩展

    分类Category 分类是运行时动态决议的,扩展是编译期决议的。通过clang -rewrite-objc ma...

  • 分类和扩展

    一般用分类做什么? 1,声明私有方法 2,分解体积庞大的类文件 3,把framework的私有方法公开 分类的特点...

  • iOS知识基础篇

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

  • IOS知识基础篇

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

  • 1. iOS面试题基础篇

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

  • iOS面试题-基础篇

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

网友评论

      本文标题:iOS--总是记不住的分类和扩展

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