object-cの@protocolの理解について

1684 ワード

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