ios開発(六)

8264 ワード

Javaを書く時すべてインタフェースinterfaceのこの概念があって、インタフェースは1山の方法の声明が実現していないで、OCの中で、Interfaceは1つです
クラスのヘッダファイルの宣言は、本当の意味でのインタフェースの意味ではなく、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

これにより,このクラスはインタフェース,すなわちプロトコルの宣言を実現し,独自のクラスメソッドを定義していることが分かる.
次に、このインタフェースを使用する主関数を見てみましょう.私はこのクラスを使用するために2つの方法を使用します.1つは、基本的な方法はクラスの創始を使用することです.
もう1つはインタフェースを使用して呼び出すことです
//
//  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:)]

この言葉の使い道は、このクラスがこの方法を実現したかどうかをテストすることです.