程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> 7、協議protocol

7、協議protocol

編輯:關於C

(1)什麼是協議

(2)如何定義協議

(3)如何使用協議


(1)什麼是協議

1、多個對象之間協商的一個接口對象。

2、提供一系列的方法來在協議的實現者和代理者之間的一種通信。

3、類似於c++中 純虛函數,或java中的接口。


(2)如何定義協議

1、只有頭文件


2、方法定義

@protocolMyprotocol


- (void) init;

- (int) updata:(int)time;


@end


3、協議中不是每個方法都要實現的。

@required [方法必須實現]

@optional [方法可以實現、缺省]

協議需要繼承於 基協議NSObject

協議可以多繼承

@protocolMyprotocol


@optional

- (void) init;

@required

- (int)>

一個簡單協議例子

\

協議使用例子:


怎麼知道shwoinfo這個方法是否寫了。

5、判斷某個對象是否響應方法

動態判斷某個方法是否實現了。

if( [test respondsToSelector:@selector(showInfo:)] )

{

[test>YES;

}


(3)如何使用協議


創建一個協議:

#import 

@protocol Myprotocol 
@optional
- (void) printValue:(int)value;
@required
- (int) printValue:(int)value1 andValue:(int)Value2;

@end

實現協議的方法:
//
//  TestProtocol.h
//  TestPortocal
//
//  Created by ccy on 13-12-21.
//  Copyright (c) 2013年 ccy. All rights reserved.
//

#import 
#import "Myprotocol.h"

@interface TestProtocol : NSObject 
{

}

- (void) testValue:(int) Value;

@end

//
//  TestProtocol.m
//  TestPortocal
//
//  Created by ccy on 13-12-21.
//  Copyright (c) 2013年 ccy. All rights reserved.
//

#import "TestProtocol.h"

@implementation TestProtocol

- (void) testValue:(int) Value
{
    NSLog(@"testValue value: %d\n", Value);
}

- (int) printValue:(int)value1 andValue:(int)Value2
{
    NSLog(@"printValue value1: %d,value2:%d\n", value1,Value2);
    return 0;
}

- (void) printValue:(int)value
{
    NSLog(@"printValue %d\n", value);
}

@end

調用,使用協議:

//
//  main.m
//  TestPortocal
//
//  Created by ccy on 13-12-21.
//  Copyright (c) 2013年 ccy. All rights reserved.
//

#import 
#import "TestProtocol.h"
//#import "Myprotocol.h"
int main(int argc, const char * argv[])
{

    @autoreleasepool {
        
        // insert code here...
        NSLog(@"Hello, World!");
        
        TestProtocol * testPtcl = [[TestProtocol alloc] init];
        [testPtcl testValue:2];
        [testPtcl printValue:30 andValue:40];
        
        //判斷方法有沒有實現
        SEL sel = @selector(printValue:);
        if( [testPtcl respondsToSelector:sel])
        {
            [testPtcl printValue:20];
        }
        
        [testPtcl release];
        
        //用協議方式實現
        id  myprotocol = [[TestProtocol alloc] init];
        [myprotocol printValue:103];
        
        [myprotocol release];
    }
    return 0;
}















  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved