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 类名

时间: 2024-08-26 08:40:37

iOS协议、代理、Block和回调、类别的相关文章

黑马程序员 委托模式--类别、协议、Block篇

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>. <a href="http://www.itheima.com"target="blank">.Net培训</a>.期待与您交流! ----------------------- 委托模式--类别.协

iOS delegate, 代理/委托与协议.

之前知知道iOS协议怎么写, 以为真的跟特么java接口一样, 后来发现完全不是. 首先, 说说应用场景, 就是当你要用一个程序类, 或者说逻辑类, 去控制一个storyboard里面的label, 发现如果直接用 UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];//由storyboard根据myView的storyBoardID来

【iOS开发-26】利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值

实验说明 (1)正向传值:比如A类里地值要传给B类用,就是我们先在A类中声明一个B类对象(当然B类头文件要import过来),然后把A类中得某个值传递给B类中得某个值(所以需要在B类中先准备一个变量来接受,就是用@property和@synthesize整个变量即可). (2)反向传值:比如需要把B类中的值传递给A类用.我们先在B类中写一个协议,协议里面有一个可以带参数的方法,这个参数就是我们要传递的值(这个协议也可以单独写,不一定写在B类中),然后B类遵循这个协议后,利用这个协议创建一个委托变

李洪强iOS开发之Block和协议

李洪强iOS开发之Block和协议 OC语言BLOCK和协议 一.BOLCK (一)简介 BLOCK是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,BLOCK可以在任何时候执行. BOLCK和函数的相似性:(1)可以保存代码(2)有返回值(3)有形参(4)调用方式一样. 标识符 ^ (二)基本使用 (1)定义BLOCK变量 Int (^SumBlock)(int,int);//有参数,返回值类型为int Void (^MyBlock)()://无参数,返回值类型

iOS开发总结——协议代理的认识

1.前言 自今年5月底正式转iOS之后,天天get新技能,很多技能在脑子里回旋不吐不快,所以,写点东西整理一下.先从协议代理开始. 2.协议方法的声明 @protocol EventMenuBarDelegate <NSObject> - (void)delegateShouldDoWhenMenuButtonTapped:(UIButton *)button; @end 以上代码意思是,利用@protocol 指令声明协议名EventMenuBarDelegate,并遵从NSObject协议

IOS开发- 用block实现回调

在IOS开发中经常会用到回调的情况,下面介绍如何用block实现回调. 1 #import <Foundation/Foundation.h> 2 3 @interface BLock : NSObject 4 5 + (void)getBlock:(void (^)(NSString *))someblock; 6 7 @end BLock.h 1 #import "BLock.h" 2 #import <Foundation/Foundation.h> 3

iOS中使用block进行网络请求回调

iOS中使用block进行网络请求回调 HttpRequest.h // // HttpRequest.h // UseBlockCallBack // // Created by Michael on 2/13/14. // Copyright (c) 2014 EIMS. All rights reserved. // #import <Foundation/Foundation.h> typedef void (^FinishBlock)(NSString *dataString); @

Swift 用Delegate和Block实现回调的Demo

一.有关回调 我们知道,执行函数的时候,一般都有return作为返回参数了,那有return了为什么还要回调呢? 回调是为了实现异步的返回,在某些特殊的情况下,比如你执行的函数是一个长时间运行的函数,并不能直接返回给你结果,为了不影响源程序其他步骤的执行,你得继续执行下去,等那边产生结果了再“主动告诉你”结果是什么. (我考虑了一下,如果使用多线程+return的方式,也许也是能够实现异步的,但并不是万能的,因为子线程中不能做UI处理) 在iOS开发中,实现回调的方式有:Delegate和Blo

iOS 协议 protocol

iOS中的协议说白了就是方法的声明,只声明不需要实现,实现的部分由遵守协议方完成. 先看个协议的小例子:这个例子是先给出两个协议,再创建两类人遵守协议. 流氓协议(RogueDelegate.h) #import <Foundation/Foundation.h> /**流氓协议*/ @protocol RogueDelegate <NSObject> @required // 必须实现的方法 /**吃*/ - (void) eat; /**骗*/ - (void) lie; @o

如何在iOS中使用Block

如何在iOS中使用Block Block可以帮助我们组织独立的代码段,并提高复用性和可读性.iOS4在UIKit中引入了该特征.超过100个的Apple API都使用了Block,所以这是一个我们必须开始熟悉的知识. Block是什么样的? 你可以使用^操作符来声明一个Block变量,它表示一个Block的开始. int num1 = 7; int(^aBlock)(int) = ^)int num2) { return num1+nunm2; }; 在如上代码中我们将Block声明为一个变量,