iOS讲义-分类和扩展的区别

iOS的分类 和 扩展的区别

分类(类别)

  • 分类也叫类别,对于一个我们可以它进行方法扩充,一般来说添加一个子类就可以达到目的,iOS提供了 类别为现有类添加新的方法,并且不需要创建子类

Xcode创建一个分类

  • 1) 点开一个文件 点击New File ,选择iOS的OC File

  • 在这里插入图片描述

  • 2)创建类别

    • 在FIle 哪一行写上类别名字,第二行选择 Categroy(类别) 第三行是要被添加的类,即可创建
      在这里插入图片描述
  • 3)完成创建

在这里插入图片描述

分类的注意

  • 分类只能添加新的方法,但是不能添加属性(成员变量),我们尝试添加成员变量
    • Property 'age1' requires method 'setAge1:' to be defined - use @dynamic or provide a method implementation in this category属性“age1”需要定义方法“setAge1:”—请使用@dynamic或在此类别中提供方法实现
    • Property 'age1' requires method 'age1' to be defined - use @dynamic or provide a method implementation in this category 属性“age1”要求定义方法“age1”-使用@动态或在此类别中提供方法实现
      这个警告只是需要我们给 用@property关键字 添加的属性手动完成setter getter方法,但是当我们在写setter getter方法的时候一旦涉及到我们在类别定义的属性的时候就会报错
      • Use of undeclared identifier 'age1'
  • 可以在分类中访问原有的 类的属性
  • 如果分类有和原来类同名的方法,会优先调用分类的方法。优先级是分类大于 本类 大于 父类
    • 如果多个分类中都有和原有类同名的方法,那么调用该用法的时候执行谁由编译器决定,编译器会执行最后一个参与编译的分类中的方法。

拓展

Xcode创建拓展

和类别的区别就是 在第二行选择Extension 其他的不变

扩展的作用

  • 可以为待扩展的类添加额外的 属性 变量 和方法生命
    • 注意私有属性写在类扩展
  • 扩展可以添加属性和成员变量
  • 扩展是本身没有自己的实现的,它和本类共享一个实现

区别和联系

  • 类别和扩展都可以为 原来的类添加新的方法,但是类别的方法不实现系统不会提供警告,扩展的方法不提供实现 系统会提示警告
    • 原因是分类在运行的时候就被添加到类中了,扩展在编译的时候阶段被添加到类中
  • 类别数不被允许添加成员变量和属性的,但是扩展可以。
  • 类别有自己的实现部分,但是扩展却没有自己的实现部分,需要和本类一起实现
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值