備忘録 〜プログラミング〜

プログラミングに関する事をつらつらと、、

Objective-cのカテゴリ機能を使用して、既存のクラスにプロパティを追加する

UIViewにTagではなく文字列として識別したくなったので、何か方法はないかと考えた末、UIViewを拡張してkeyというプロパティを持たせる事にしました。
方法は、こちら。

.hファイルにプロパティ追加

@property (strong, nonatomic) NSString key;

.mファイルに@dynamicで宣言して、setter、getterの処理を.mファイルに追加(#import <objc/runtime.h>を忘れずに)

@dynamic key;
- (void)setKey:(NSString *)key
{
  objc_setAssociatedObject(self, @"key", key, OBJC_ASSOCIATION_RETAIN);
}

- (NSString *)key
{ return objc_getAssociatedObject(self, @"key"); }

これで無事、既存クラスにカテゴリ機能を使用してプロパティの追加が出来ました。

尚、カテゴリファイルの命名規則は、
ヘッダファイルであれば、
<カテゴリ追加先のクラス名>+<カテゴリ名>.h。
実装ファイルであれば、
<カテゴリ追加先のクラス名>+<カテゴリ名>.m
こんな感じでOKかと。

こちらを参考にさせてもらいました。


【Objective-C,iOS】カテゴリでプロパティを追加する方法 - へろへろもへじ