@blog.justoneplanet.info

日々勉強

Objective-Cのプロトコルとカテゴリ

■プロトコル

JavaやPHPのインターフェース的なもの。

Animal.h

動物という種は存在しないので、以下のようにプロトコルとして定義した。

#import <Foundation/Foundation.h>
@protocol Animal
@property(copy, readwrite) NSString *_name;
-(id)         init:(NSString *)name;// initialize
-(NSString *) cry: (NSString *)name;// instance method
+(NSString *) getKind;              // class method
@end

Dog.h

上述で定義したプロトコルを以下のようにして実装する。

#import "Animal.h"
@interface Dog:NSObject<Animal>
@end

Dog.m

以下のように実装する。

#import "Dog.h"
@implementation Dog
@synthesize _name;
- (id) init: (id) name {
    self._name = name;
    return self;
}
-(NSString *)cry: (NSString *)name{
    return [NSString stringWithFormat:@"bow! from %@ to %@", self._name, name];
}
+(NSString *)getKind{
    return @"Dog";
}
@end

ちなみに、プロトコルで宣言したメソッドが実装されていない場合、warningが発生する。

■カテゴリ

複数のクラスに分割したり、クラスに新しい機能を追加したりできる。

trim.h

#import <Foundation/Foundation.h>
@interface NSString(Trim)
- (NSString *) trim;
@end

trim.m

#import "trim.h"
@implementation NSString(Trim)
- (NSString *) trim{
    return [self stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
}
@end

上述の記述によって、NSStringクラスにTrimメソッドが追加される。文法は全然違うけどJSのprototype的な発想かもしれん。

コメントはまだありません»

No comments yet.

RSS feed for comments on this post.TrackBack URL

Leave a comment