代理模式

Class A, Class B

代理的中心意思就是: 代替其他的类去执行一些代码

class A creates something called a protocol.  This protocol has a list of methods in it (with no definition). 

Class A then has an instance of the protocol as a property. 

Class B has to implement the protocol defined in class A. 

Lastly, when class A is created, it’s delegate property is set to class B.

代理协议机制在iOS开发中,是非常常用的一种消息传递机制,主要用于子视图向父视图传递数据,代理协议是单向消息传递。

要使用代理协议,需要以下几个步骤:

1.    子视图控制器中需要做如下操作:

1)     在子视图控制器中定义协议,并且定义若干协议方法,注意:只有方法,而没有方法的具体实现。协议的名称通常是子视图控制器的类名+Delegate

2)     在子视图控制器中定义代理属性,代理的属性是weak

3)     子视图控制器中,在需要时直接通过_delegate调用协议方法,就可以执行父视图控制器中的相应方法的实现

2.    父视图控制器中需要做如下操作:

1)     遵从子视图控制器头文件中定义的协议

2)     在推出子视图控制器前,设置自己是子视图控制器的代理,通常在prepareSegue方法中实现

3)     实现子视图控制器中的协议方法,等待子视图控制器的调用


页面传值

GameViewController 上的结果显示到ViewController 上

ViewController 就是代理方

**遵守协议+实现代理方法

GameViewController 是委托方

**定义代理+执行协议方法 

委托方:在GameViewController.h中定义

//1.定义协议

//协议名称是委托方名字+delegate

@protocol GameViewControllerDelegate <NSObject>

//2.定义代理

@property (weak,nonatomic)id<GameViewControllerDelegate> delegate;


GameViewController.m中执行协议方法

//委托代理执行方法,如果没有设置代理,不生效,也不报错

        [_delegategameViewDidDone:[_timerLabeltext]];

代理方:

ViewController.m中执行协议方法

//所有vc的内置方法,

//所有sb中的连线在推出新的控制器之前都会调用此方法

//可以通过segue的一个属性获取目标视图控制器

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

{

   //获取连线要打开的视图控制器

    GameViewController *controller=[segue destinationViewController];

   //申请成为游戏试图代理,设置后,游戏室图控制器的协议方法会在当前视图控制器中执行

   //self执行代理方法

    [controller setDelegate:self];

}


#pragma mark 代理方法

-(void)gameViewDidDone:(NSString *)timeString

{

   // NSLog(@"spend:%@",timeString);

    NSString *highest=[NSStringstringWithFormat:@"The Highest Score is %@",timeString];

    [_HighestScoresetText:highest];

    

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值