`
zjjzmw1
  • 浏览: 1369050 次
  • 性别: Icon_minigender_1
  • 来自: 开封
社区版块
存档分类
最新评论

delegate

    博客分类:
  • iOS
阅读更多

delegate

昨天做了一个demo,用到了简单代理。

delegate是ios编程的一种设计模式。我们可以用这个设计模式来让单继承的objective-c类表现出它父类之外类的特征。昨天这个代理实现如下:

 

类GifView是继承自UIView的,它加载在RootViewController上来通过一个Timer播放动画。同时,RootViewController需要知道Timer的每次执行。

代码如下。

首先,定义GifView,在其头文件中定义代理EveryFrameDelegate,同时声明方法- (void)DoSomethingEveryFrame;

复制代码
#import <UIKit/UIKit.h>

@protocol EveryFrameDelegate <NSObject>

- (void)DoSomethingEveryFrame;

@end

@interface GifView : 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.05 target:self selector:@selector(play) userInfo:nil repeats:YES];
[timer fire];
}
return self;
}

-(void)play
{
[delegate DoSomethingEveryFrame];

}
复制代码

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的每次执行了。

分享到:
评论

相关推荐

    简单的delegate实现

    在iOS开发中,Delegate是一种非常重要的设计模式,它允许对象之间进行通信,特别是当一个对象(委托者)需要通知另一个对象(委托对象)某些事件发生时。本文将深入讲解“简单的Delegate实现”,并以实际代码为例,...

    iPhone编程delegate示例

    在Objective-C中,`delegate`是一种关键的编程模式,用于实现对象间的通信。本文将深入探讨如何在iPhone编程中使用`delegate`,并以一个名为"MyDelegateSample"的示例项目来说明。 首先,`delegate`是Objective-C中...

    iOS Delegate传值通俗理解

    在iOS开发中,Delegate是一种非常重要的设计模式,用于对象间通信。它允许一个对象(委托者)通知另一个对象(委托对象)关于特定事件的发生。在iOS应用中,Delegate经常用于控制器间的通信,如UIViewController和...

    iOS学习笔记3---delegate五步曲,轻松学会使用delegate

    在iOS开发中,Delegate是一种非常重要的设计模式,它允许对象之间进行通信,使得一个对象能够对另一个对象的行为进行响应。本篇文章将通过“delegate五步曲”,帮助你深入理解并熟练掌握如何在iOS应用中使用Delegate...

    VB.Net-C#多线程Thread-代理委托delegate编程

    最近收集的VB.Net-C#多线程Thread-代理委托delegate编程。文章列表: c#.net多线程同步.txt C#WebBrowser页面与WinForm交互技巧一.txt C#多线程编程-多细全.txt C#多线程编程简单实例.txt C#多线程窗体控件安全访问....

    C#使用委托(delegate)实现在两个form之间传递数据的方法

    本文实例讲述了C#使用委托(delegate)实现在两个form之间传递数据的方法。分享给大家供大家参考。具体分析如下: 关于Delegate【代理、委托】是C#中一个非常重要的概念,向前可以推演到C++的指针,向后可以延续到匿名...

    Delegate&Block作回调

    本示例主要探讨了两种回调方式:Delegate(代理)和Block(块)。这两种方式各有特点,开发者可以根据实际需求选择合适的实现方式。 首先,我们来详细了解一下Delegate。Delegate是一种协议(Protocol)导向的回调...

    delegate一对多

    在iOS和macOS开发中,`delegate`模式是一种常见的设计模式,用于实现对象间的通信。在标题"delegate一对多"中,"一对多"指的是一个委托(delegate)对象可以同时处理多个其他对象的请求或事件。这种模式尤其在UI组件...

    OC中以delegate形式页面传值

    页面间的通信是应用程序设计的关键部分,而`delegate`模式是OC中实现这种通信的一种常见方法。本篇文章将深入探讨如何在OC中使用`delegate`来实现页面间的传值。 **一、Delegate模式简介** Delegate模式是一种设计...

    在qt的MVC模式中,运用控件在delegate中显示的方法

    在本主题中,我们将深入探讨如何在Qt的MVC环境中,利用Delegate来显示自定义控件。 **1. MVC模式简介** MVC模式由三个主要组件构成: - **Model**:数据模型,负责存储和管理数据。 - **View**:视图,负责数据的...

    C# Delegate小例子

    在这个"C# Delegate小例子"中,我们将深入探讨Delegate的概念、使用方式以及它在实际编程中的应用。 1. **Delegate概念**: Delegate在C#中是一种类,它代表对方法的引用。这种引用是类型安全的,意味着在编译时就...

    Qt 自定义Model和自定义Delegate

    在Qt框架中,模型(Model)和代理(Delegate)是数据可视化的核心组件,它们负责管理和展示数据。在本文中,我们将深入探讨如何在Qt中自定义Model和Delegate,以实现特定的功能,例如在ListView中展示带有图片和删除...

    delegate与block的使用

    在iOS和macOS的开发中,Delegate和Block是两种非常重要的设计模式,它们用于实现对象间的通信和回调机制。Delegate通常用于实现一对多的关系,而Block则提供了更加灵活的代码块传递方式。这两种机制在软件设计中都有...

    swift-多delegate的使用

    在Swift编程语言中,Delegate是一种常见的设计模式,用于对象间通信。通常,一个类(委托者)会设置另一个类(委托)作为其代理,以便在特定事件发生时通知委托对象。然而,标题“swift-多delegate的使用”指出,...

    QT 自定义混合控件——基于View/Model/Delegate的QTableView/QTreewidget/Combobox实现

    在本项目"QT自定义混合控件——基于View/Model/Delegate的QTableView/QTreewidget/Combobox实现"中,我们将深入探讨如何利用QT库中的核心组件构建一个强大的数据展示和交互界面。 首先,我们要理解View/Model/...

    iOS设计模式——委托(delegate)例子

    本文将重点关注“委托”(Delegate)设计模式,这是一种常见的模式,用于在对象之间建立通信和协调行为。通过实现委托,一个对象(委托者)可以通知或询问另一个对象(委托对象)来执行特定任务或响应特定事件。 ...

    c#的回调函数(delegate关键字)

    C#中的委托(Delegate) 在C#中,委托(Delegate)是一种特殊的类型,用于封装方法的引用。它可以将方法作为参数传递,类似于C++中的函数指针,但是委托是类型安全和可靠的。 在上面的代码中,我们定义了一个委托...

    (Swift)SceneDelegate中启动UI

    在Swift编程语言中,SceneDelegate是iOS应用开发中的一个重要组件,尤其在iOS 13及更高版本中。SceneDelegate作为应用程序界面(UI)初始化和管理的核心部分,它负责处理应用程序的生命周期事件,如窗口创建、激活和...

    IOS源码之页面之间数据传送(通过delegate)

    本示例主要讲解如何通过代理(Delegate)协议在页面之间进行数据传输,适用于Xcode 4.5开发环境和iOS 6.0操作系统。首先,我们需要了解什么是代理以及如何设置和使用。 代理(Delegate)是一种设计模式,它允许对象...

Global site tag (gtag.js) - Google Analytics