9.7. Delegate (Delegates) example

发布时间 : 2025-10-25 13:32:32 UTC      

Page Views: 10 views

Suppose object An invokes B to perform an operation, and once the operation is completed, object A must know that object B has completed the task and that object A will perform other necessary actions.

The key concepts in the above example are

  • An is the delegated object of B.

  • B refers to an A

  • A will implement B’s delegate method

  • B notify by entrusting method

Create a Delegates object

  1. Create an application with a single view

  2. Then select the file File-> New-> File…

addNewFile

  1. Then select Objective C and click next.

  2. Name the subclass of SampleProtocol NSObject, as follows

setProtocolName

  1. Then select create

6.向SampleProtocol.h文件夹中添加一种协议,然后更新代码,如下所示:

#import  // 协议定义 @protocol SampleProtocolDelegate  @required - (void) processCompleted; @end // 协议定义结束 @interface SampleProtocol : NSObject { // Delegate to respond back id  _delegate; } @property (nonatomic,strong) id delegate; -(void)startSampleProcess; // Instance method @end    

7.修改 SampleProtocol.m 文件代码,实现实例方法:

#import "SampleProtocol.h" @implementation SampleProtocol -(void)startSampleProcess{ [NSTimer scheduledTimerWithTimeInterval:3.0 target:self.delegate selector:@selector(processCompleted) userInfo:nil repeats:NO]; } @end 

8. 将标签从对象库拖到UIView,从而在ViewController.xib中添加UILabel,如下所示:

delegateLabel

9. 创建一个IBOutlet标签并命名为myLabel,然后按如下所示更新代码并在ViewController.h里显示SampleProtocolDelegate

#import  #import "SampleProtocol.h" @interface ViewController : UIViewController<SampleProtocolDelegate> { IBOutlet UILabel *myLabel; } @end    

10. 完成授权方法,为SampleProtocol创建对象和调用startSampleProcess方法。如下所示,更新ViewController.m文件

#import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; SampleProtocol *sampleProtocol = [[SampleProtocol alloc]init]; sampleProtocol.delegate = self; [myLabel setText:@"Processing..."]; [sampleProtocol startSampleProcess]; // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } #pragma mark - Sample protocol delegate -(void)processCompleted{ [myLabel setText:@"Process Completed"]; } @end 

11. 将看到如下所示的输出结果,最初的标签也会继续运行,一旦授权方法被SampleProtocol对象所调用,标签运行程序的代码也会更新。

delegateResult

《地理信息系统原理、技术与方法》  97

最近几年来,地理信息系统无论是在理论上还是应用上都处在一个飞速发展的阶段。 GIS被应用于多个领域的建模和决策支持,如城市管理、区划、环境整治等等,地理信息成为信息时代重要的组成部分之一; “数字地球”概念的提出,更进一步推动了作为其技术支撑的GIS的发展。 与此同时,一些学者致力于相关的理论研究,如空间感知、空间数据误差、空间关系的形式化等等。 这恰好说明了地理信息系统作为应用技术和学科的两个方面,并且这两个方面构成了相互促进的发展过程。