Categoryでクラスを拡張する

Categoryを使うと, Objective-Cのクラスのファイルを分離できる
また, 既存のクラスに適用すると,
既存のクラスにメソッドを追加できたりする。

ファイル

ClassName+CategoryName.h, ClassName+CategoryName.m
といったファイル名にするのが,ルール。
宣言の部分などがちょっと違う

@interface Class (Category)
// Code
@end
@implementation Class (Category)
// Code
@end

NSDateをちょっと拡張する

ヘッダーの準備
NSDate+CurrentTimeMillis.h

@interface NSDate (CurrentTimeMillis)
+(long long)currentTimeMillis;
@end

コード
NSDate+CurrentTimeMillis.m

@implementation NSDate (CurrentTimeMillis)
+(long long)currentTimeMillis 
{
    struct timeval t;
    gettimeofday(&t, NULL);
    long long millis = t.tv_sec * 1000 + t.tv_usec / 1000;
    return millis;
}
@end

使用する

#import "NSDate+CurrentTimeMillis.h"
long long time = [NSDate currentTimeMillis];

サブクラスを普通に使えばよいのでは思ってしまう訳だが
クラスに動的に追加できるということ + 既存クラスをそのまま拡張できるところがよいところか。