【协议】(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和回调、类别相关推荐

  1. ios利用block实现回调示例

    利用block完成回调,小demo一个.闲话少说,直接上代码了!O(∩_∩)O~ TestObject.h [objc] view plaincopy #import <Foundation/F ...

  2. IOS的OC项目下回调函数的定义以及传参

    IOS的OC项目下回调函数的定义以及传参 1.首先定义一个类方法,通过类名打点调,没有返回值的, +(void) 2. 起个函数名字 +(void)headLineWithSuccess , head ...

  3. IOS之代理的使用(重点)

    IOS之代理的使用(重点) IOS的代理(Delegate) 是学习的重难点,必须学会,必须滚瓜烂熟 1.点击自定义视图的时候,创建了一个Label,Label添加到了superView,不合理的地方 ...

  4. 利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值...

    实验说明 (1)正向传值:比如A类里地值要传给B类用,就是我们先在A类中声明一个B类对象(当然B类头文件要import过来),然后把A类中得某个 值传递给B类中得某个值(所以需要在B类中先准备一个变量 ...

  5. iOS开发关于block学习的总结

    一,什么是blocks Block是一个C级别的语法以及运行时的一个特性,和标准C中的函数(函数指针)类似,但是其运行需要编译器和运行时支持,从ios4.0开始就很好的支持Block. 二,什么情况下 ...

  6. (0032) iOS 开发之Block 的基础用法及注意事项1

    该文章参考多篇文章,已记不清,如有问题请联系我. 参考:http://blog.csdn.net/zm_yh/article/details/51469275 Block理解 1. Block执行的代 ...

  7. IOS之代理文字点击变大变小

    IOS之代理文字点击变大变小 重点是掌握代理的使用,否则也失去次此意义 #import "ViewController.h" #import "AHLJFontSizeP ...

  8. iOS开发关于block和局部变量和全局变量

    iOS开发关于block和局部变量和全局变量 block内部引用全局变量和局部变量一直都是一个坑 block与局部变量 - (void)aboutBlock1{__block int index = ...

  9. iOS之代理/协议 @protocal

    理解: @protocal 可以定义一个协议.一个类如果使用了这个协议,那么就要按照这个协议要求的去办事.最常见的就是UITableViewDelegate.UITableViewDataSource ...

最新文章

  1. 4.1.6 文件的基本操作
  2. c25---条件编译
  3. Ubuntu修改/删除主目录下的中文文件夹
  4. java canvas 缩放图片_java-GWT:放大和缩小画布绘图
  5. 编译Android源码相关资源及文章
  6. oracle和mysql数据实时同步_FileYee文件实时同步备份软件,再不怕数据丢失
  7. Visual C# 2005 编译器选项
  8. Linux版本的tomcat安装包
  9. PeekMessage和GetMessage的区别
  10. csc.exe的使用
  11. 雨林木风windows7旗舰版
  12. 大叔手记(2):为每个应用程序池单独设置aspnet.config配置文件
  13. 用计算机实测技术研究声波和拍内容,大学物理实验
  14. 2021年暑期训练阶段三Day3
  15. Elasticsearch文档内部的父子关系
  16. 当“长期主义”遇上“流量生意”,轻松筹与水滴筹谁更胜一筹?
  17. 多边形(polygon)
  18. 拼多多库存怎么做|旭宇同创
  19. USACO 2021 January Contest, BronzeProblem 3. Just Stalling题解
  20. husky v8 lint-stage eslint

热门文章

  1. Visual C++ 2008入门经典 第二十一章更新数据源
  2. python def和lambda的应用
  3. C#写一个URL编码转换GB23121的方法,然后可以取到天气预报
  4. Ubuntu系统下Git的使用
  5. sed在行首(行尾)添加字符串;在某行后添加多行字符串-转
  6. 蓝桥杯 ADV-193算法提高 盾神与条状项链
  7. 蓝桥杯 ADV-134算法提高 校门外的树
  8. asp td tr 高度_ASP.NET Core Blazor 初探之 Blazor Server
  9. Docker cpu memory quota使用说明
  10. Golang中unsafe.Sizeof()的问题