---恢复内容开始---

一Category

1Category 也叫分类,类目。是为没有源代码的类扩充功能

2扩充的功能会成为原有的类的一部分,可以通过原有类或者原有类的对象直接调用,并且可以继承

3该方式只能扩充方法,不能扩充实例变量

Category的文件创建

在类目的.h文件中声明需要添加的方法

@interface NSString (AddMethod) //声明sayHi⽅方法
+ (void)sayHi;
@end

在类目的.m文件中实现需要实现的方法

@implementation NSString (AddMethod) //实现sayHi⽅方法
+ (void)sayHi {
NSLog(@"我是牛逼的字符串"); }
@end

①在使用类目添加的方法首先要在对应的类中导入类目的.h文件

②sayHi方法是通过类目为NSString类添加的一个类方法,因此该方法的调用需要NSString类名调用

二Extension

1未能够获得源代码的类添加私有的实例变量和方法

2注意:延展操作的类必须是能够获得源代码的类

Teacher类中.m⽂文件中的代码@interface Teacher(){
NSInteger _salary; //存储对应的薪资 }
- (NSInteger)getSalary; //声明⼀一个领⼯工资的⽅方法 @end
@implementation Teacher
//实现领⼯工资的操作
- (NSInteger)getSalary { NSLog(@"这个⽉月发了不少,可以吃⼤大餐了");  _salary = 1000;
return _salary;
}
@end

main.m中调⽤用getSalaryTeacher *teacher = [[Teacher alloc]init];   [teacher getSalary];
通过延展定义的⽅方法属于私有⽅方法,外界是没有访问权
限的,只能在当前类的.m⽂文件中访问。

Category 和Extension的区别

三delegate设计模式

1delegate的三要素 委托方,代理方,协议

2委托方:委托别人去执行某些操作的人(对象)

3协议;(Protocol):委托方需要代理方执行的操作

4代理方:被委托去执行某系操作的人(对象)

delegate模式写使用案例

案例描述
结婚案例:有⼀一个⼥女孩结婚之前需要⾃自⼰己洗⾐衣服,做饭,挣
钱养活⾃己。但是有⼀一天⼥女孩不想再⾃自⼰己做饭,洗⾐衣服,挣
钱养活⾃己,因此她想要找⼀一个代理⼈人来帮她做,于是就想
到了结婚。

案例分析
对于做饭,洗⾐衣服,挣钱养活⾃自⼰己这些事情⼥女孩不
想⾃自⼰己做,想要通过结婚来找⼀一个男孩帮她做的过
程是⼀一个明显的代理设计模式。其中⼥女孩在该过程
中是委托⼈人,跟她结婚的那个男孩是代理⼈人,下⾯面
我们来看⼀一下如何通过代理设计模式实现该过程。

步骤1:⼥女孩制定协议
在⼥女孩的.h⽂文件中声明协议GirlDelegate
@protocol GirlDelegate <NSObject> - (void)cooking; //做饭
- (void)makeMoney; //挣钱养活⾃自⼰己 @optional
- (void)washing; //洗⾐衣服 @end

步骤2:⼥女孩定义delegate属性
在⼥女孩的.h⽂文件中声明协议GirlDelegate
@interface Girl : NSObject
//声明 delegate属性存储代理⼈人对象。<>代表遵循协议 
@property (nonatomic, assign)id<GirlDelegate>delegate;@end

步骤3:男孩遵守协议并实现协议⽅方法
男孩遵守协议(男孩的.h⽂文件中)#import <Foundation/Foundation.h>#import "Girl.h"@interface Boy : NSObject<GirlDelegate>
@end

步骤3:男孩遵守协议并实现协议⽅方法
男孩实现协议⽅方法(男孩的.m⽂文件中)@implementation Boy- (void)cooking {
NSLog(@"给⽼老婆做饭"); }
- (void)makeMoney { NSLog(@"挣钱养活⽼老婆");
}
//洗⾐衣服的操作可以选择实现 - (void)washing {NSLog(@"为⽼老婆洗⾐衣服"); }
@end
•

步骤4:将男孩设置为⼥女孩的代理⼈人
在main.m⽂文件中完成的操作
//创建男孩对象
Boy *boy = [[Boy alloc] init]; //创建⼥女孩对象
Girl *girl = [[Girl alloc] init]; //将男孩设置为⼥女孩的代理⼈人对象 girl.delegate = boy;
•

步骤5:⼥女孩在合适的时机通知男孩做相应的操作
//模拟饥饿的操作
if ([girl.delegate respondsToSelector:@selector(cooking)]) {
//通知男孩去做饭[girl.delegate cooking];
}
注:respondsToSelector:该⽅方法判断对象是否能够对某⼀一个选定的⽅方法 做出响应。

---恢复内容结束---

转载于:https://www.cnblogs.com/yuboke/p/5234999.html

oc知识点 类的扩展相关推荐

  1. OC中类别、扩展、协议与托付

    类别(category)--通过使用类别,我们能够动态地为现有的类加入新方法.并且能够将类定义模块化地分不到多个相关文件里.通常仅仅在类别中定义方法. 类别,接口部分的定义,通常该文件命名为已有&qu ...

  2. ios c语言调用oc方法,ios开发之OC基础-类和对象(示例代码)

    本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...

  3. ios开发之OC基础-类和对象

    ios开发之OC基础-类和对象 本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录 ...

  4. 对象的指针指向哪里,oc的类信息存放在哪里

    对象指针指向 instance对象的isa指向class对象 class对象的isa指向meta-class对象 meta-class对象的isa指向基类的meta-class对象 但是isa指针的地 ...

  5. C++类功能扩展预留五招

    第一招虚函数 通过派生类来进行功能扩展是基本的面向对象的方式,这种方式大如下: class base { public: virtual ~base(){} virtual void fun() { ...

  6. 【Kotlin】扩展接收者 与 分发接收者 ( 类内部扩展用法 | 注意事项 | open 修饰扩展 )

    文章目录 I . 类内部扩展其它类 II . 扩展接收者 与 分发接收者 注意事项 III . open 修饰 分发接收者 类型中的扩展 I . 类内部扩展其它类 1 . 扩展函数 / 属性声明的位置 ...

  7. Java程序猿的JavaScript学习笔记(10—— jQuery-在“类”层面扩展)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  8. dart系列之:你的地盘你做主,使用Extension对类进行扩展

    文章目录 简介 dart中extension的使用 API冲突 extention的实现 总结 简介 一般情况要扩展一个类,需要继承这个类,这是在大多数java或者其他面向对象语言中要做的事情. 但是 ...

  9. java基础(1)-几种获取类的扩展方式

    摘要 在日常开发过程中经常需要获取类的扩展集.即获取类的子类集(抽象类),或者接口实现类.比如说状态模式中,状态构建类,策略模式中的,策略构造方式.本文介绍几种获取方式. 实现 以策略模式为例 定义了 ...

最新文章

  1. App乱世,3721离我们有多远
  2. Vs工程高版本向低版本迁移
  3. SendMessage 循环按1 到6 F1到F8_2
  4. Hadoop大数据平台构建与应用
  5. 5. DICOM图像层级分类-DCMTK-压缩图像PixelData读取
  6. css 控制自动换行,问题:css 自动换行;结果:CSS控制文本自动换行
  7. 基金投资入门1:基金基础知识介绍
  8. OpenCV之凸包检测基础
  9. nx.adjacency_matrix(G).todense()计算邻接矩阵与真实结果不一致
  10. 美术集网校--常见的水粉调色纯干货分享,记得收藏!
  11. build-essential unmet dependencies 有未满足依赖 解决办法
  12. Android 类似未读短信消息图标显示的实现分析
  13. 了解微信小程序、掌握微信小程序开发工具的使用、了解小程序的目录以及文件结构、掌握小程序中常用的组件、掌握WXML、WXSS、WXS的基本使用
  14. JBuilder连接oracle数据库
  15. 这 4 个超实用的 Docker 镜像构建技巧!你不会不知道吧?
  16. 熬夜再战Android之修炼Kotlin-为什么要搞她?
  17. Mastering Qt 5 学习笔记-Mandelbrot
  18. 香侬科技 Shannon.AI 招聘自然语言处理、计算机视觉工程师
  19. PlantUML Themes
  20. CFNetwork初步

热门文章

  1. 监听localStorage变化(同页面监听)
  2. node:ORM、数据模型、脚本创建模型与服务层
  3. 良心之作----centos6.5下安装svn客户端报错
  4. hadoop安装部署(伪分布及集群)
  5. 蚂蚁金服大规模分布式事务实践和开源历程
  6. Spring Boot 常见面试题
  7. [雪峰磁针石博客]大数据Hadoop工具python教程9-Luigi工作流...
  8. delphi之模糊找图
  9. ppt转html格式
  10. 机器学习:如何在安卓上集成TensorFlow