iOS协议、代理、Block和回调、类别
【协议】(Protocol)
//协议是用来规范接口,实现对象间交互的一种机制。类似于JAVA中的接口,可以模拟。
协议的权限
@optional//可选的
@required//必须的
【代理】
一.代理的概念
【注】代理是实现两个类的对象间通信的一种机制。
【委托方】主动方 持有带协议的id指针,可以使用协议。
【代理方】被动方 遵从协议,实现方法。
代理回调(反向传值)
//当我们需要完成某个功能模块,但不知道使用功能模块的是哪个对象,通过协议,可以规定接收数据的对象通过哪个方法获得数据。调用该方法的过程称为【回调】
【Block】
【注】Block是管理程序中代码块的对象
//Block和函数指针很相似,可以记成将函数指针的*改成^
int (^block)(int, int);
【注】block是一个指向Block对象的指针
//block是一个Block对象指针
block = ^(int a, int b){
NSLog(@"这个代码块被使用了");
return a + b;
};
//这不是个函数,是一个代码块对象
NSLog(@"%d", block(4, 8));
【注】__block关键字,声明一个变量,使变量在Block的内外都能使用。
【类别】
【问题】有的时候我们使用一个类(官方,第三方,自己创建的)会感叹,如果这个类再有一个什么什么样的方法就更好用了,更适合当前程序。但是我们却不方便修改原类。
【答】可以使用类别为类增补方法
一.认识类别(Category)
【注】类别是类的升级补丁,可以为类添加成员方法。另外类别也可以对类的方法分类管理。
【注】
1.类别中不能添加成员变量
2.在类别中添加的消息,就如同添加到原类当中;对象的方法可以使用原类对象的成员变量。
3.使用类别须导入类别头文件。
4.父类类别中的方法,子类也可以用。
【注】
1.如果类别中的方法很少,类别只用于当前文件,可以直接将类别声明到当前文件中。
2.如果类别的实现和类别中方法的调用在同一文件中,可以省略类别的接口部分
二.匿名类别
【注】类别的【仕途不顺】的远亲。
【见CategoryDemo2】
三.前置声明
【注】编写程序时,不要在一个类的头文件中包含另一个类的头文件,以免彼此包含头文件发生【交叉包含】。
【注】A类使用B类,应在实现部分包含B类头文件。
【注】如果A类接口部分使用到B类名称,应做B类的前置声明
@class B;
@class 类名
转载于:https://www.cnblogs.com/MarkBlog/p/4394942.html
iOS协议、代理、Block和回调、类别相关推荐
- ios利用block实现回调示例
利用block完成回调,小demo一个.闲话少说,直接上代码了!O(∩_∩)O~ TestObject.h [objc] view plaincopy #import <Foundation/F ...
- IOS的OC项目下回调函数的定义以及传参
IOS的OC项目下回调函数的定义以及传参 1.首先定义一个类方法,通过类名打点调,没有返回值的, +(void) 2. 起个函数名字 +(void)headLineWithSuccess , head ...
- IOS之代理的使用(重点)
IOS之代理的使用(重点) IOS的代理(Delegate) 是学习的重难点,必须学会,必须滚瓜烂熟 1.点击自定义视图的时候,创建了一个Label,Label添加到了superView,不合理的地方 ...
- 利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值...
实验说明 (1)正向传值:比如A类里地值要传给B类用,就是我们先在A类中声明一个B类对象(当然B类头文件要import过来),然后把A类中得某个 值传递给B类中得某个值(所以需要在B类中先准备一个变量 ...
- iOS开发关于block学习的总结
一,什么是blocks Block是一个C级别的语法以及运行时的一个特性,和标准C中的函数(函数指针)类似,但是其运行需要编译器和运行时支持,从ios4.0开始就很好的支持Block. 二,什么情况下 ...
- (0032) iOS 开发之Block 的基础用法及注意事项1
该文章参考多篇文章,已记不清,如有问题请联系我. 参考:http://blog.csdn.net/zm_yh/article/details/51469275 Block理解 1. Block执行的代 ...
- IOS之代理文字点击变大变小
IOS之代理文字点击变大变小 重点是掌握代理的使用,否则也失去次此意义 #import "ViewController.h" #import "AHLJFontSizeP ...
- iOS开发关于block和局部变量和全局变量
iOS开发关于block和局部变量和全局变量 block内部引用全局变量和局部变量一直都是一个坑 block与局部变量 - (void)aboutBlock1{__block int index = ...
- iOS之代理/协议 @protocal
理解: @protocal 可以定义一个协议.一个类如果使用了这个协议,那么就要按照这个协议要求的去办事.最常见的就是UITableViewDelegate.UITableViewDataSource ...
最新文章
- 4.1.6 文件的基本操作
- c25---条件编译
- Ubuntu修改/删除主目录下的中文文件夹
- java canvas 缩放图片_java-GWT:放大和缩小画布绘图
- 编译Android源码相关资源及文章
- oracle和mysql数据实时同步_FileYee文件实时同步备份软件,再不怕数据丢失
- Visual C# 2005 编译器选项
- Linux版本的tomcat安装包
- PeekMessage和GetMessage的区别
- csc.exe的使用
- 雨林木风windows7旗舰版
- 大叔手记(2):为每个应用程序池单独设置aspnet.config配置文件
- 用计算机实测技术研究声波和拍内容,大学物理实验
- 2021年暑期训练阶段三Day3
- Elasticsearch文档内部的父子关系
- 当“长期主义”遇上“流量生意”,轻松筹与水滴筹谁更胜一筹?
- 多边形(polygon)
- 拼多多库存怎么做|旭宇同创
- USACO 2021 January Contest, BronzeProblem 3. Just Stalling题解
- husky v8 lint-stage eslint
热门文章
- Visual C++ 2008入门经典 第二十一章更新数据源
- python def和lambda的应用
- C#写一个URL编码转换GB23121的方法,然后可以取到天气预报
- Ubuntu系统下Git的使用
- sed在行首(行尾)添加字符串;在某行后添加多行字符串-转
- 蓝桥杯 ADV-193算法提高 盾神与条状项链
- 蓝桥杯 ADV-134算法提高 校门外的树
- asp td tr 高度_ASP.NET Core Blazor 初探之 Blazor Server
- Docker cpu memory quota使用说明
- Golang中unsafe.Sizeof()的问题