Corona中文站

强大、易学的跨平台(iOS/Android)开发框架。QQ群1:74390406(满) 群2:221929599

导航

objective-c实现回调函数的几种方法
利用协议实现回调

实现的代码如下:

定义协议:

#import
@protocol NoteDelegate
//回调函数
-(void)messageCallBack:(NSString *)string;
@end


调用协议:

#import
#import "NoteDelegate.h"
@interface ManagerMessage : NSObject {
id *noteDelegate;
}
@property (nonatomic,retain) id *noteDelegate;
-(void)startThread;
@end

#import "ManagerMessage.h"
@implementation ManagerMessage
@synthesize noteDelegate;
//开始一个线程
-(void)startThread
{

[NSTimer scheduledTimerWithTimeInterval:3
target:self
selector:@selector(targetMethod:)
userInfo:nil
repeats:NO];
}
-(void)targetMethod:(NSString *)string
{
if (self.noteDelegate!=nil) {
//完成线程 调用回调函数
[self.noteDelegate messageCallBack:@"回调函数"];
}
}
@end

前台页面实现:

#import "IphoneDeleteViewController.h"
#import "ManagerMessage.h"
@implementation IphoneDeleteViewController
@synthesize textView;

//回调函数
-(void)messageCallBack:(NSString *)string
{
self.textView.text=string;
}

- (void)viewDidLoad {
[super viewDidLoad];
self.textView.text=@"测试";
ManagerMessage *message=[[ManagerMessage alloc] init];
//通知调用协议
message.noteDelegate=self;
[message startThread];
[message release];
}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}

- (void)viewDidUnload {
self.textView=nil;
}

- (void)dealloc {
[self.textView release];
[super dealloc];
}

@end


纯c方法

一般来说,在客观回调- C是处理通过委托对象和一个选择器来执行该委托。 例如,此方法将调用消息后,记录就其委托方法,传递自身和这是记录的信息。

- (void)logMessage:(NSString *)message
delegate:(id)delegate
didLogSelector:(SEL)didLogSelector
{
NSLog(@"%@", message);
if (delegate && didLogSelector && [delegate respondsToSelector:didLogSelector]) {
(void) [delegate performSelector:didLogSelector
withObject:self
withObject:message];
}
}
你可能会调用的代码这样说:

- (void)sayHello
{
[logger logMessage:@"Hello, world"
delegate:self
didLogSelector:@selector(messageLogger:didLogMessage:)];
}
- (void)messageLogger:(id)logger
didLogMessage:(NSString *)message
{
NSLog(@"Message logger %@ logged message '%@'", logger, message);
}
您还可以使用objc_msgSend()直接代替,但您需要了解的Objective - C运行足够选择的变体使用,以及如何构建原型和函数指针,通过它来调用它。 (这是机制,信息发送的实际执行在Objective - C -什么编译器通常生成的呼吁,以便代表[]表达式。)
<< 开发支持iPhone横屏的Tab Bar程序如何自定义view controller及动态切换view [复制链接] >>

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最近发表

Powered By Z-Blog 1.8 Walle Build 100427 Copyright 2011-2015 BuildApp.Net. All Rights Reserved.