LoginSignup
7
7

More than 5 years have passed since last update.

カテゴリを理解する

Last updated at Posted at 2014-05-19

カテゴリは、クラスにメソッドを追加できたりと実現できることは継承に近い。
カテゴリを使う利点としては
・クラスクラスタを継承する場合には面倒な面も多いためカテゴリで機能追加をするほうが簡単
・元々のクラスの機能に付与でき、そのクラスを使用しているコードを書き換える必要がない。
がある。

NSStringをカテゴリを用いて機能拡張することを考える。
(NSStringはクラスクラスタに属する。)
カテゴリNSString+Foo.h、NSString+Foo.mでは、
barメソッドの追加とlowercaseStringの書き換えを行った。

main関数の中では、元々のNSStringしかimportしていないが
NSStringの機能が追加・拡張されていることが確認できる。

参考までに検証に用いたコードを以下に示す。

NSString+Foo.h
#import <Foundation/Foundation.h>

@interface NSString (Foo)
-(void)bar;
@end
NSString+Foo.m
#import "NSString+Foo.h"

@implementation NSString (Foo)
-(NSString *)lowercaseString
{
    return [self stringByAppendingString:@"foobar"];
}

-(void)bar
{
    NSLog(@"bar is called");
}
@end
main.m
#import <Foundation/NSString.h>

int main()
{
    NSString *msg= [[NSString alloc] init];
    msg = @"lowercaseString";
    NSLog(@"msg:%@",[msg lowercaseString]);
    objc_msgSend(msg,@selector(bar));

    return 0;
}
7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7