關於 object-c的@protocol的理解,object-c@protocol
從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並傳送指標;
互連網的一點事 www.yidin.net