`

iPhone开发之Delegate(代理、委托)的理解和使用

 
阅读更多

做程序时,经常会碰到这样一种情况:在对象A中有一个对象B,在B中做某个操作时需要调用A对象的某个方法。这时,我们就需要用代理机制,也叫委托机制。

还记得刚接触面向对象的时候,居然在B对象中又alloc了一个A对象,发现执行方法时没有works,那时不理解新alloc的对象和原来的对象A不是一个东东。
今天专门补习了一下哈,在网上找了一些资料,综合了一下,写了这篇菜鸟教程。

委托代理(delegate),顾名思义,把某个对象要做的事情委托给别的对象去做。那么别的对象就是这个对象的代理,代替它来打理要做的事。反映到程序中, 首先要明确一个对象的委托方是哪个对象,委托所做的内容是什么。委托机制在很多语言中都用到的,这只是个通用的思想,网上会有很多关于这方面的介绍。

下面以一个简单的例子介绍一下委托:

一、新建iPhone项目DelegateDemo;

二、添加UIView类ViewA;

三、ViewA.h的内容如下:

#import <UIKit/UIKit.h>

@protocol ViewADelegate; //申明代理协议

@interface ViewA : UIView {
	id <ViewADelegate> _viewADelegate;
}

@property (nonatomic, assign) id viewADelegate; //定义代理的属性,同时要在.m加中

@end

//代理协议的内容
@protocol ViewADelegate <NSObject>
- (void)viewACallBack;
@end

View.m中:
@synthesize viewADelegate = _viewADelegate;

三、在DelegateDemoViewController.m中:

- (void)viewDidLoad {
	ViewA *viewA = [[ViewA alloc] initWithFrame:CGRectMake(50, 100, 200, 100)];
	viewA.viewADelegate = self; //设置viewA的代理为当前对象自己
	[self.view addSubview:viewA];
	[viewA release];
	[super viewDidLoad];
}

- (void)viewACallBack {
	NSLog(@"Hi, I am back!");
}

四、点击此处下载示例。

分享到:
评论

相关推荐

    delegate 使用 xcode iOS

    在iOS开发中,`delegate`模式是一种常见的通信方式,它允许对象之间进行单向通信,通常用于一个对象(委托者)向另一个对象(代理)发送通知或请求处理某些任务。`Delegate`机制是iOS设计模式的基础,广泛应用于...

    iPhone开发入门.pdf

    《iPhone开发入门》这篇文档主要介绍了如何开始开发iPhone应用程序,特别是针对初学者,强调了Objective-C基础知识的重要性,并以MoveMe样本代码为例进行讲解。本文档分为几个关键部分,包括初始化应用程序、创建...

    iPhone源码分析(委托模式)

    在iOS开发中,委托模式(Delegate Pattern)是一种常见的设计模式,用于实现对象间的通信和协作。在本案例中,我们通过分析iPhone的源码样例,可以看到如何在两个UIViewController之间使用委托模式进行交互。 首先...

    iphone 各种视图切换效果

    UIPageViewController用于创建类似相册或电子书的翻页效果,通过设置pageViewController的dataSource和delegate,可以控制页面内容和切换逻辑。通过自定义数据源,你可以实现无限滚动或非线性页面布局。 4. **...

    iPhone UIKit详解

    3. **代理模式(Delegate)**:许多UIKit组件支持委托协议,通过实现特定方法来响应用户操作或更新视图状态。 4. **通知(Notification)**:UIKit允许应用订阅和发布通知,以便在特定事件发生时进行通信。 5. **...

    林本杰:换个角度做开发

    林本杰分享的内容涉及了 Delegate、Observer、Block、UI、数据库设计等多个方面,旨在帮助开发者理解在iPhone开发中如何做出更优的选择。 首先,林本杰提出了“Delegate还是Observer”的问题。在iOS开发中,委托...

    Objective-C代理 练习

    6. **代理的应用场景**:代理模式在Objective-C中有很多实际应用,如数据源(datasource)和委托(delegate)模式在UITableView和UICollectionView中的使用,以及处理用户交互事件等。 7. **可选协议方法**:...

    iPhone 定位位置变化捕获源代码

    在iOS开发中,捕获iPhone的位置变化是一项常见的需求,尤其对于地理位置相关应用而言。本教程将深入探讨如何通过源代码实现这一功能,主要基于苹果的Core Location框架。Core Location是iOS SDK提供的一种服务,用于...

    示例代码大家随意

    首先,我们来看看标签"iOS",这是苹果公司为移动设备如iPhone和iPad开发应用程序的操作系统。iOS开发使用的主要编程语言是Swift或Objective-C,它们提供了丰富的API和工具来构建用户界面、处理数据、网络通信等。在...

    IOS iphone UITableView简单例子

    此外,标签"iOS5"表明这个示例可能适用于较早版本的iOS系统,但现代iOS开发通常使用更高级的语言特性(如Swift)和API,所以如果你在新版本的Xcode中工作,可能需要适配和更新代码。 总之,这个简单的UITableView...

    apple程序生命周期

    对于iPhone开发来说,掌握这个生命周期有助于编写更加高效和响应良好的应用。 首先,让我们回顾一下Objective-C中的协议(Protocol)。协议在iOS开发中扮演着接口的角色,允许类之间定义一套可选或必需的方法。在...

    Cocoa基本原理指南

    例如,UITableView的delegate和dataSource属性就是典型的委托实现。 4. **KVC(Key-Value Coding)与KVO(Key-Value Observing)**:Cocoa提供了键值编码和键值观察机制,使得动态访问对象属性和监听属性变化变得...

    WHC_ComboBoxDemo

    自定义控件通常会提供一些公开的属性和方法,以便在其他类中使用和配置。例如,可能有设置文字、图标、下拉选项的方法,以及触发下拉事件的代理方法等。 8. 协议与委托: 在iOS开发中,常通过协议(Protocol)和...

    ios-模仿自选股导航栏菜单.zip

    这可能通过委托代理模式(Delegate Pattern)来实现,使得视图可以响应数据源的变化并实时更新界面。 在实际应用中,开发者可以根据需求对`TYYFilterView`进行定制,比如改变字体、颜色、背景等样式,或者添加点击...

    ios-ZXDCalander.zip

    8. **通知和代理**:ZXDCalander控件可能通过委托协议(Delegate)向父视图或其他组件发送用户选择日期的通知,以便进行后续的业务逻辑处理。 9. **优化性能**:对于大量日期的显示,优化内存管理和渲染性能至关...

    ios-日历选择器.zip

    8. **数据源(DataSource)和委托(Delegate)**:作为UICollectionView或UITableView的数据源和委托,LPHCalendar需要实现相关的方法,如numberOfItemsInSection、cellForItemAt等,以填充和管理日历视图。...

    ios开发知识点

    - **delegate**: 代理模式,允许一个对象将其某些职责委托给指定的其他对象来执行,通常用于通知另一个对象当前对象的状态改变或者请求另一个对象执行某个操作。 **7. NSFileHandle** - **NSFileHandle**: 用于...

    ios object-c 面试试题 及答案

    在iOS开发中,Objective-C是主要的编程语言之一,面试中常常会涉及到一系列技术问题,以下是一些关于Objective-C的面试知识点和解答: 1. **main.m中的过程**: `main.m`是iOS应用程序的入口点。在这个文件中,`...

    ios-列表展示.zip

    4. 数据源与代理:在iOS中,UITableView和UICollectionView都遵循数据源(DataSource)和委托(Delegate)模式。DataSource负责提供数据,如好友的数量、每个好友的信息等;Delegate则负责处理用户交互,如点击事件...

Global site tag (gtag.js) - Google Analytics