objective-c カテゴリーでインスタンス変数を宣言して使う。
これでUIViewControllerに NSString* VCStrという物が出来ます。
このソースはretainで使用している為、dealloc時に[self setVCStr: nil];が必要となる
これは忘れそうだな・・。
UIViewControllerにNSString*を追加する
// これをimportする事
#import "objc/runtime.h"
// 型の後にconstを付ける事によってポインターアドレスを変更出来なくする
static NSString* const ViewControllerStringSet = @"VCSTRSet";
@interface ViewController (AddInstance)
@property (nonatomic, retain) NSString* VCStr;
@end
@implementation ViewController (AddInstance)
@dynamic VCStr;
- (void) setVCStr: (NSString*)VCStr
{
objc_setAssociatedObject(self, (const void *)(ViewControllerStringSet), nil, OBJC_ASSOCIATION_RETAIN);
objc_setAssociatedObject(self, (const void *)(ViewControllerStringSet), VCStr, OBJC_ASSOCIATION_RETAIN);
}
- (NSString*) VCStr
{
return objc_getAssociatedObject(self, (const void*)ViewControllerStringSet);
}
@end
objc_setAssociatedObjectについての説明は
http://blog.takeba.me/2009/08/snow-leopardassociated-object.html
ここから参考にしました。
どうやら、オブジェクトとオブジェクトを紐付ける機能らしいです。
引数を見ると(対象、キー、該当オブジェクト、オプション)って感じです。
色々な所から参考にして作成したソースなので分からない所多々あり。
なんでキーを渡す時にconst void*やらないといけないの?
このソースはretainで使用している為、dealloc時に[self setVCStr: nil];が必要となる
これは忘れそうだな・・。
UIViewControllerにNSString*を追加する
// これをimportする事
#import "objc/runtime.h"
// 型の後にconstを付ける事によってポインターアドレスを変更出来なくする
static NSString* const ViewControllerStringSet = @"VCSTRSet";
@interface ViewController (AddInstance)
@property (nonatomic, retain) NSString* VCStr;
@end
@implementation ViewController (AddInstance)
@dynamic VCStr;
- (void) setVCStr: (NSString*)VCStr
{
objc_setAssociatedObject(self, (const void *)(ViewControllerStringSet), nil, OBJC_ASSOCIATION_RETAIN);
objc_setAssociatedObject(self, (const void *)(ViewControllerStringSet), VCStr, OBJC_ASSOCIATION_RETAIN);
}
- (NSString*) VCStr
{
return objc_getAssociatedObject(self, (const void*)ViewControllerStringSet);
}
@end
objc_setAssociatedObjectについての説明は
http://blog.takeba.me/2009/08/snow-leopardassociated-object.html
ここから参考にしました。
どうやら、オブジェクトとオブジェクトを紐付ける機能らしいです。
引数を見ると(対象、キー、該当オブジェクト、オプション)って感じです。
色々な所から参考にして作成したソースなので分からない所多々あり。
なんでキーを渡す時にconst void*やらないといけないの?
objc_setAssociatedObject 。。。?ランタイム関数
http://blog.takeba.me/2009/08/snow-leopardassociated-object.html
これをみてまた新しい事が分かりました。
リンクの最後の所が大事ですね。
カテゴリーで元のクラスを 拡張したい時に有効そうです。
これをみてまた新しい事が分かりました。
リンクの最後の所が大事ですね。
カテゴリーで元のクラスを 拡張したい時に有効そうです。