delegate / target, action / block

本文详细介绍了iOS开发中常用的三种通信机制:代理、目标-动作及Block的使用方法。包括如何定义协议、设置代理及使用Block进行回调等核心内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

delegate / target, action / block

delegate:

A要执行B的方法, 先声明一个协议(A,B遵循这个协议),在A中声明一个代理的属性,在B中通过 A的对象.delegate = self来实现设置B为A的代理人,这时就可以在A中通过 self.delegate(A的代理)来调用B中的方法了

一般在A的.h中写协议,也可以新建一个协议

@protocol 协议名 <NSObject>

协议方法

@end


声明代理属性,delegate是代理名,自定义的

@property (nonatomic, assign) id<协议名>delegate;


A的.m中通过代理调用方法

[self.delegate A要执行的方法];


在B中初始化一个A的对象,并设置代理

A *a = [A alloc] init];

a.delegate = self;



target, action:

A要执行B的方法,在A中声明属性 id target 和 SEL action, 在B中通过 A的对象.target = self 和 A的对象.action = @selector(要执行的方法) 来实现类似代理人的操作,同代理一样,此时在A中通过 [self.target performSelector:self.action withObject:self] 就可以调用A要执行的方法了

A的.h中声明属性

@property (nonatomic, assign) id target;

@property (nonatomic, assign) SEL action;

A的.h中调用方法

[self.target performSelector:self.action withObject:self];


在B中初始化一个A的对象,并设置target 和 action

second.target = self;

second.action = @selector(A要执行的方法);


block:

block可以作为属性也可以作为参数

做属性:

A中声明一个block属性

@property (nonatomic, copy) void(^changeColor2)(UIColor *);

  block属性名 block的类型

下面这步类似给属性赋值

self.changeColor2([UIColor redColor]);


B中定义一个方法

void (^changeColor)(UIColor *) = ^(UIColor *color){

       方法名        参数类型        参数

        self.view.backgroundColor = color;

    };

block的属性传值(传给了changeColor方法的参数)

A的对象.changeColor2 = changeColor;



做参数:

A中声明一个方法,block作为参数

-(void)changeColor:(void(^)(UIColor *color))block;

       方法名                参数类型         参数名

方法的实现

-(void)changeColor:(void (^)(UIColor *))block {

    block([UIColor yellowColor]);

}


//也可以先定义block参数,只是写法不同

//typedef void(^Block)(UIColor *color);

//-(void)changeColor:(Block)block;

//方法的实现

//-(void)changeColor:(Block)block {

//    block([UIColor yellowColor]);

//}


在B中通过 A的对象 调用方法实现改变B的背景颜色

[A的对象 changeColor:^(UIColor *color) {

    self.view.backgroundColor = color;

}];


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值