oc知识点 类的扩展
---恢复内容开始---
一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知识点 类的扩展相关推荐
- OC中类别、扩展、协议与托付
类别(category)--通过使用类别,我们能够动态地为现有的类加入新方法.并且能够将类定义模块化地分不到多个相关文件里.通常仅仅在类别中定义方法. 类别,接口部分的定义,通常该文件命名为已有&qu ...
- ios c语言调用oc方法,ios开发之OC基础-类和对象(示例代码)
本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...
- ios开发之OC基础-类和对象
ios开发之OC基础-类和对象 本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录 ...
- 对象的指针指向哪里,oc的类信息存放在哪里
对象指针指向 instance对象的isa指向class对象 class对象的isa指向meta-class对象 meta-class对象的isa指向基类的meta-class对象 但是isa指针的地 ...
- C++类功能扩展预留五招
第一招虚函数 通过派生类来进行功能扩展是基本的面向对象的方式,这种方式大如下: class base { public: virtual ~base(){} virtual void fun() { ...
- 【Kotlin】扩展接收者 与 分发接收者 ( 类内部扩展用法 | 注意事项 | open 修饰扩展 )
文章目录 I . 类内部扩展其它类 II . 扩展接收者 与 分发接收者 注意事项 III . open 修饰 分发接收者 类型中的扩展 I . 类内部扩展其它类 1 . 扩展函数 / 属性声明的位置 ...
- Java程序猿的JavaScript学习笔记(10—— jQuery-在“类”层面扩展)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- dart系列之:你的地盘你做主,使用Extension对类进行扩展
文章目录 简介 dart中extension的使用 API冲突 extention的实现 总结 简介 一般情况要扩展一个类,需要继承这个类,这是在大多数java或者其他面向对象语言中要做的事情. 但是 ...
- java基础(1)-几种获取类的扩展方式
摘要 在日常开发过程中经常需要获取类的扩展集.即获取类的子类集(抽象类),或者接口实现类.比如说状态模式中,状态构建类,策略模式中的,策略构造方式.本文介绍几种获取方式. 实现 以策略模式为例 定义了 ...
最新文章
- App乱世,3721离我们有多远
- Vs工程高版本向低版本迁移
- SendMessage 循环按1 到6 F1到F8_2
- Hadoop大数据平台构建与应用
- 5. DICOM图像层级分类-DCMTK-压缩图像PixelData读取
- css 控制自动换行,问题:css 自动换行;结果:CSS控制文本自动换行
- 基金投资入门1:基金基础知识介绍
- OpenCV之凸包检测基础
- nx.adjacency_matrix(G).todense()计算邻接矩阵与真实结果不一致
- 美术集网校--常见的水粉调色纯干货分享,记得收藏!
- build-essential unmet dependencies 有未满足依赖 解决办法
- Android 类似未读短信消息图标显示的实现分析
- 了解微信小程序、掌握微信小程序开发工具的使用、了解小程序的目录以及文件结构、掌握小程序中常用的组件、掌握WXML、WXSS、WXS的基本使用
- JBuilder连接oracle数据库
- 这 4 个超实用的 Docker 镜像构建技巧!你不会不知道吧?
- 熬夜再战Android之修炼Kotlin-为什么要搞她?
- Mastering Qt 5 学习笔记-Mandelbrot
- 香侬科技 Shannon.AI 招聘自然语言处理、计算机视觉工程师
- PlantUML Themes
- CFNetwork初步