昨天做了一个demo,用到了简单代理。
delegate是ios编程的一种设计模式。我们可以用这个设计模式来让单继承的objective-c类表现出它父类之外类的特征。昨天这个代理实现如下:
类GifView是继承自UIView的,它加载在RootViewController上来通过一个Timer播放动画。同时,RootViewController需要知道Timer的每次执行。
代码如下。
首先,定义GifView,在其头文件中定义代理EveryFrameDelegate,同时声明方法- (void)DoSomethingEveryFrame;
#import<UIKit/UIKit.h>
@protocolEveryFrameDelegate <NSObject>
- (
void)DoSomethingEveryFrame;
@end@interfaceGifView : UIView
{
NSTimer *timer;
id<EveryFrameDelegate>
delegate;
NSInteger currentIndex;
}
@property (nonatomic, retain)
id<EveryFrameDelegate>
delegate;
@end
然后,只要在GifView.m中让Timer在每次执行的时候调用delegate来执行DoSomethingEveryFrame,代码如下
- (
id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if(self)
{
timer = [NSTimer scheduledTimerWithTimeInterval:
0.05target:self
selector:@selector(play) userInfo:nil repeats:YES];
[timer fire];
}
returnself;
}
-(
void)play
{
[
delegateDoSomethingEveryFrame];
}
GifView上的工作就完成了。
下面是RootViewController中的代码,RootViewController只要在定义GifView的时候指定其代理为自身,就可以知道Timer的每次执行:
- (
void)viewDidLoad
{
[super viewDidLoad];
//Do
any additional setup after loading the view, typically from a nib.
CGRect rect = CGRectMake(
0,
0,
200,
200);
GifView *tmp = [[GifView alloc] initWithFrame:rect];
tmp.
delegate= self;
[self.view addSubview:tmp];
[tmp release];
}
- (
void)DoSomethingEveryFrame
{
NSLog(
@"I'm
the delegate! I'm doing printing!");
}
GifView中Timer每次执行都会打印一行
I'm the delegate! I'm doing printing!
故,RootViewController就知道Timer的每次执行了。
分享到:
相关推荐
在iOS开发中,协议(Protocol)和代理(Delegate)是两个至关重要的概念,它们构成了对象间通信的基础。本文将深入探讨这两个概念,并通过一个实际的Demo来加深理解。 首先,让我们了解一下什么是协议。在Objective...
在这个"iOS代理协议DEMO"中,我们将深入探讨如何在iOS应用中使用代理来实现功能交互,特别是与用户界面相关的颜色变化。 首先,我们需要理解什么是代理模式。代理模式是一种结构型设计模式,它允许我们为其他对象...
在本示例"IOS代理协议"中,我们将深入探讨如何在iOS应用中使用代理协议来实现组件间的通信。 首先,让我们理解协议(Protocol)的概念。在Objective-C和Swift中,协议是一种规范,定义了遵循该协议的对象需要实现的...
在iOS开发中,代理是一种常见的设计模式,用于对象间的通信。在这个“iOS 代理传值简单demo”中,我们将探讨如何使用代理协议(Delegate Protocol)来实现界面间的数据传递,这对于初学者理解Objective-C或Swift中的...
总结,iOS代理反向传值是实现组件间通信的有效手段,尤其适用于父子控制器间的交互。通过正确理解和运用,可以提高代码质量,实现更优雅的程序设计。在实际项目中,应根据具体需求选择合适的数据传递方式。
"IOS代理方法反向传值"是一种常见的数据通信方式,特别是在多个视图控制器(UIViewController)之间进行数据交换时。这种方式利用了Objective-C的协议(Protocol)和代理(Delegate)机制,使得一个对象能够通过代理...
在iOS开发中,代理模式是一种常见的设计模式,用于对象间通信。它允许一个对象(委托者)将某些任务委托给另一个对象(代理),这样可以实现松耦合,提高代码的可读性和可维护性。标题“ios中的代理设置模式”正是...
以下是关于iOS代理传值的详细说明: 1. **协议(Protocols)**:协议在Objective-C中类似于接口,定义了一组方法签名,让遵循该协议的对象必须实现这些方法。在代理设计模式中,协议通常用于定义代理对象需要实现的...
IOS 代理方式实现 在客户端开发中,经常用到通知、代理、block来实现各个页面之间关联。通知,以一直“盲”的方式实现传递。 代理、block 可以很明确的知道各个界面之间的关联关系。以代理为例,一般的做法如下 : ...
以下是对iOS代理方法的深入探讨。 1. **代理协议(Delegate Protocol)**: - 代理协议定义了代理对象需要遵循的方法。这些方法通常与委托者的行为或状态变化相关。 - 定义协议时,使用`@protocol`关键字,并在...
总结一下,iOS代理传值的核心步骤包括: 1. 定义代理协议,声明需要的方法。 2. 创建委托者(Delegate)对象,声明遵循协议的属性。 3. 在委托者对象中,调用代理对象实现的方法进行通信。 4. 创建实现协议的接收者...
本篇文章将深入探讨iOS代理的使用,包括其原理、实现方式以及常见应用。 首先,代理的基本原理是对象A(委托者)通过遵循特定的协议,声明它可以处理来自对象B(代理)的某些请求。对象B在需要执行某些操作或需要...
ios中非常重要的delegate和protocol的通俗讲解,非常清晰易懂,看了之后,让你对代理和协议有不一样的认识。
让我们深入了解一下iOS代理模式的核心概念、用途以及如何实现。 **代理模式的定义** 代理模式是一种结构型设计模式,它允许一个对象代表另一个对象并控制其行为。在iOS应用中,代理通常用于处理事件响应、数据传递...
在iOS开发中,代理模式是一种常用的设计模式,它在软件设计中扮演着重要的角色,尤其在事件传递、数据交互和对象间的通信等方面。本篇文章将深入探讨代理模式的基本概念、工作原理及其在iOS中的实际应用。 **代理...
本篇文章将深入探讨iOS代理传值的相关知识点。 首先,理解代理的基本概念。代理是一种接口,定义了委托者可以调用的一系列方法。在Objective-C中,代理通常是一个遵循特定协议(Protocol)的类。协议定义了代理需要...
标题提到的"ios 使用代理双向传值"是指在Objective-C或Swift中利用代理协议(Delegate Protocol)进行数据的双向传递,通常在不同界面之间或者组件之间进行通信时使用。这种设计模式允许一个对象(发送者)通知另一...
在iOS开发中,代理是一种常见的组件间通信方式,它允许对象之间进行轻量级、灵活的交互,尤其在处理事件传递、数据交换等场景下尤为适用。本篇将深入探讨如何在iOS应用中实现简单的代理机制,以及如何利用代理来实现...
在iOS开发中,代理(Delegate)、通知(Notification)和Block模式是三种常见的对象间通信机制。这三种方式各自有其特点和应用场景,开发者通常根据需求选择合适的方式进行数据传递和事件响应。 首先,代理模式是...
在iOS开发中,数据传递是应用交互的基础,而代理(Delegate)是一种常用的数据通信机制,尤其在跨页面间传递信息时。本篇文章将深入探讨如何使用代理协议在不同视图控制器之间实现数据传递。 首先,代理模式是面向...