mojavy.com

objective-cのプロトコルとデリゲーションについてのメモ

July 17, 2012 at 06:30 PM | categories: objective-c |

objective-c

  • プロトコルとはクラス間で共有するメソッドのリスト。
  • javaでいうinterfaceのようなもの。
  • @optionalディレクティブ以降のメソッドは実装が任意。
  • @requiredディレクティブで必須。
  • プロトコルに必要なメソッドは直接そのクラスで実装してもいいし、継承元の親クラスで実装してもよい。
  • requiredがすべて実装されていなかった場合、コンパイラーはワーニングを出す。(エラーではない)
  • すべてのrequiredメソッドを実装したクラスはそのプロトコルにconform(もしくはadopt)したという。
  • そのオブジェクトがconformしているかどうかチェックするには、conformsToProtocolメソッドを使う。
  • そのオブジェクトがoptionalなメソッドを実装しているかどうかをチェックするには、respondsToSelectorを使う。
  • コンパイル時に型チェックが行われる。型宣言にを含めるとよい。
  • カテゴリもプロトコルにadoptできる。
  • プロトコルの名前はユニークでなければならない。
  • delegationとはプロトコルで定義されたメソッドを実装したクラスを定義すること。
  • informal protocolというものもあるが、これは単に実装がないカテゴリのこと。abstract protocolともいう。ドキュメンテーションやモジュラリティのために用いる。コンパイル時チェックはなし。プロトコルの@optionalディレクトリはObjective-C 2.0で追加されたので、こちらをつかえばよい。
  • eclipseでいうデリゲートは、Composite Objectとよばれる

myProtocol.h

#import <Foundation/Foundation.h>

@protocol myProtocol <NSObject>

- (void)f1;
- (void)f2: (id)obj0 withObject1:(id)obj1;

@end

myProtocolImpl.h

#import <UIKit/UIKit.h>
#import "myProtocol.h"

@interface myProtocolImpl : NSObject <myProtocol>

- (void)f1;
- (void)f2: (id)obj0 withObject1:(id)obj1;

@end

myProtocolImpl.m

#import "myProtocolImpl.h"

@implementation myProtocolImpl

- (void)f1
{
    NSLog(@"called f0");
}

- (void)f2: (id)obj0 withObject1:(id)obj1
{
    NSLog(@"called f2");
}

@end

参考



blog comments powered by Disqus

About Me

pic
mojavy

Recent posts






Categories



Badges