从C++到objective-C----委托

从C++到objective-C----委托,第1张

概述委托在IOS开发框架Cocoa Touch 中经常使用,其含义是一个类的对象要求委托对象执行它的某些 *** 作。委托机制实际是种设计模式,通过此种机制,能降低对象间的耦合。一上为概念描述。 本文 主要介绍的是Objective-C中的NSObject基类,是片初学者理解id类型的入门文章, 熟悉Objective-C的课直接阅读 iOS设计模式--委托模式 //环境 //Mac OS X 10.3.7

委托在IOS开发框架Cocoa touch 中经常使用,其含义是一个类的对象要求委托对象执行它的某些 *** 作。委托机制实际是种设计模式,通过此种机制,能降低对象间的耦合。一上为概念描述。

本文 主要介绍的是Objective-C中的NSObject基类,是片初学者理解ID类型的入门文章,

熟悉Objective-C的课直接阅读 iOS设计模式--委托模式


//环境

//Mac OS X 10.3.7

//Xcode Version 4.2.1

//使用的是Xcode的Command line Tool工程,结果由命令行输出

代码(点这里下载)

@interface MyFrameWork : NSObject{}@property (nonatomic,assign)NSObject * delegate;//委托对象的指针,类型为NSObject,即一切objective-c类的父类- (ID)init;- (voID) callDelegate;@end


#import "MyFrameWork.h"@implementation MyFrameWork@synthesize delegate;- (Nsstring *) description{    return (@"I am MyFrameWork");}-(ID) init{    self = [super init];    if (self){     }    return  self;    }-(voID)callDelegate{    //通过delegate指针访问类Delegate的description方法    Nsstring *string = [self.delegate description];    //发现在最新版的编译器里面NSLog为了安全(支持ARC),只接受格式化的字符串,因为NSLog底层也是用printf来格式化输出的。    //NSLog(str);                          // warning    // NSLog(@"%@",str);         // solution    // NSLog(str,nil);                   // solution    NSLog(string,nil);}

@interface Delegate : NSObject@property NSInteger number;-(ID)init;@end#import "Delegate.h"@implementation Delegate@synthesize number;-(Nsstring *)description{    self.number = self.number + 1;    Nsstring *string = [[Nsstring alloc] initWithFormat:@"I am Delegate,%ld calls",self.number];    return (string);}-(ID)init{    self = [super self ];    if (self) {        self.number =0;    }    return self;}@end

       首先定义了两个类,MyFrameWork类通过Delegate类完成访问Delegate的description方法。从这里看出objective-c的纯面向对象性,如果熟悉C++的童鞋,就会发现上述同样的功能的比较难完成,C++没有共同的父类,所以不存在一个指针可以指向任意的委托对象,这似乎是个不可解决的问题。但C++中有类的成员函数指针这一概念,具体的实现可以看一下这篇博文,多参数时实现的很巧妙。具体应用中可直接用ID类型,一般应用到框架上,还会同时带上协议,例如:


上图为使用Core Location框架(移动设备定位)中,类及协议组成的委托。

总结

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

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

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

原文地址:https://www.54852.com/web/1059836.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存