從java角度來理解
@protocol 相當於 java 的接口定義,用法也一樣
下面是試驗例子
@protocol mytestClass <NSObject>
- (void) callback:(int) num;
@end
@interface DiscoveryController : UIViewController<mytestClass>{
UIImageView *imageView;
}
-(UIImage *) getImageFromURL:(NSString *)fileURL;
@end
在這裡定義了protocol並由類
DiscoveryController實現此接口
@interface MyCallBack : NSObject
{
id<mytestClass> deleage;
}
@property(nonatomic,retain) id<mytestClass> deleage;
- (void)setRun;
@end
MyCallBack中保存從其它類傳過來的
deleage當需要時進行回調。
//
// MyCallBack.m
// ACMobile
//
// Created by mr.liang on 15/1/22.
// Copyright (c) 2015年 mr.liang. All rights reserved.
//
#import "MyCallBack.h"
@implementation MyCallBack
@synthesize deleage;
- (void) runThread
{
NSLog(@"我在運行");
[NSThread sleepForTimeInterval:2];
[deleage callback:1];
}
- (void)setRun
{
NSThread *callbackthread = [[NSThread alloc] initWithTarget:self selector:@selector(runThread) object:nil];
[callbackthread start];
}
@end
這裡通過線程進行異步回調會讓程序更加直觀。
MyCallBack *vv = [[MyCallBack alloc] init];
vv.deleage = self;
[vv setRun];
需要用到protocol的地方實現這個protocol並傳送指針;