1. 程式人生 > >Object-C中的協議Protocol

Object-C中的協議Protocol

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

在寫java的時候都會有介面interface這個概念,介面就是一堆方法的宣告沒有實現,而在OC裡面,Interface是一個

類的標頭檔案的宣告,並不是真正意義上的介面的意思,在OC中,介面是由一個叫做協議的protocol來實現的。這個裡面

可以宣告一些方法,和java不同的是,它可以宣告一些必須實現的方法和選擇實現的方法。這個和java是完全不同的。

下面我們就用一個例子來說明這個吧。

首先是MyProtocol.h也就是介面的宣告檔案

////  MyProtocol.h//  Protocol////  Created by bird on 12-10-22.//  Copyright (c) 2012年 bird. All rights reserved.//#import <Foundation/Foundation.h>@protocol MyProtocol <NSObject>@optional//這個方法是可選的
- (void) print:(int) value;@required//這個方法是必須實現的- (int) printValue:(int) value1 andValue:(int) value2;@end

然後是Mytest.h也就是類的宣告檔案,這個類講實現這個介面

////  MyTest.h//  Protocol////  Created by bird on 12-10-22.//  Copyright (c) 2012年 bird. All rights reserved.//#import <Foundation/Foundation.h>#import "MyProtocol.h"
@interface MyTest : NSObject <MyProtocol>- (void) showInfo;@end

下面就是實現檔案了

////  MyTest.m//  Protocol////  Created by bird on 12-10-22.//  Copyright (c) 2012年 bird. All rights reserved.//#import "MyTest.h"@implementation MyTest- (void) showInfo{    NSLog(@"show info is calling");}- (int) printValue:(int)value1 andValue:(int)value2{    NSLog(@"print info that value1 is %d and value2 is %d",value1,value2);    return 0;}//下面的這個方法可以實現也可以不實現- (void) print:(int)value{    NSLog(@"print is value is %d",value);}@end

這樣我們就可以看出了,這個類實現了介面也就是協議的宣告的方法,然後還定義了自己的類方法。


下面我們來看一下主函式來使用這個介面,我將分別使用兩種方式來使用這個類,一個是基本的方法就是使用類的創

建來呼叫,另一個就是使用介面來呼叫

////  main.m//  Protocol////  Created by bird on 12-10-18.//  Copyright (c) 2012年 bird. All rights reserved.//#import <Foundation/Foundation.h>#import "MyTest.h"#import "MyProtocol.h"int main(int argc, const char * argv[]){    @autoreleasepool {                //這裡是普通的類的呼叫方法        MyTest * myTest = [[MyTest alloc] init];        [myTest showInfo];                SEL sel = @selector(print:);//這個print轉換成的方法        //確定這個print方法是否實現        if([myTest respondsToSelector:sel]){                [myTest print:20];        }                        [myTest printValue:25 andValue:15];        [myTest release];                //下面的方法使用協議的方式來呼叫        id<MyProtocol> myProtocol = [[MyTest alloc] init];        if([myProtocol respondsToSelector:@selector(print:)]){            [myProtocol print:210];        }                [myProtocol release];    }    return 0;}

[myProtocol respondsToSelector:@selector(print:)]
這句話的用處就是測試是否這個類實現了這個方法           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述