从C++到objective-c----委托(模板方法)

从C++到objective-c----委托(模板方法),第1张

概述在上篇中,简单介绍了委托如何实现,在Core Location框架中,委托与协议共同使用,实现了对象间解耦及灵活性的问题,现在在上一份代码的基础上,新增加一个协议,即ManagerDelegate,此协议只有一个方法decideFrameDescription,这就构成了一个委托机制(delegation)(设计模式的一种)。 代码(点击这里下载) //环境 //Mac OS X 10.3.7 /


在上篇中,简单介绍了委托如何实现,Core Location框架中,委托与协议共同使用,实现了对象间解耦及灵活性的问题,现在在上一份代码的基础上,新增加一个协议,即ManagerDelegate,此协议只有一个方法decIDeFrameDescription,这就构成了一个委托机制(delegation)(设计模式的一种)。

代码(点击这里下载)

//环境

//Mac OS X 10.3.7

//Xcode Version 4.3.2 (4E2002)  为了IOS 5.1 升级了新版本的xcode

//代码中NSObject *可以用ID类型替换

#import <Foundation/Foundation.h>@protocol ManagerDelegate <NSObject> //协议- (BOol) decIDeFrameDescription;@end

通过Delegate实现此协议,即

@interface Delegate : NSObject<ManagerDelegate>//绑定mangerDelegate@property NSInteger number;-(ID)init;@end
#pragma mark-#pragma mark ManagerDelgate//实现协议-(BOol) decIDeFrameDescription{    return NO;    //通过return YES 或者 NO,来控制框架的描述}@end
最终框架会在根据用户在Delegate中协议的描述,完成框架里相应方法的变化,在本例中是

@implementation MyFrameWork@synthesize delegate,decIDe;- (Nsstring *) description{    if([self.decIDe decIDeFrameDescription]){        return (@"I am a MyFrameWork");    }    else{        return (@"I am a decIDed MyFrameWork");    }}
在框架中需声明协议接受的对象类型,如下

@protocol ManagerDelegate; //对协议声明的引用@interface MyFrameWork : NSObject{}@property (nonatomic,assign)NSObject   *delegate;//委托对象的指针,类型为NSObject,即一切objective-c类的父类@property (nonatomic,assign)ID<ManagerDelegate> decIDe;//声明需要接受实现了ManagerDelegate协议的对象- (ID)init;- (voID) callDelegate;@end
最终,我们通过在Delegate中实现ManagerDelegate协议,而框架通过decIDeFrameDescription的返回值,实现了改变。像在 Cocoa touch框架中,如果我们要使用一个picker(选取器),但框架不知道我们要的是几个组件的picker和每个组件的内容,所以需要在我们的VIEwControler中实现<UIPickerVIEwDelegate>和<UIPickerVIEwDataSource>.如果在 numberOfComponentsInPickerVIEw中返回2,完成numberOfRowsInComponent的组件选择,完成UIPickerVIEwDataSource协议。
运行显示效果如下图:


    <此例为其他工程截图>

总结

以上是内存溢出为你收集整理的从C++到objective-c----委托(模板方法)全部内容,希望文章能够帮你解决从C++到objective-c----委托(模板方法)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1059822.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存