相互に関連付けられたUIViewオブジェクトのコレクションを保持するNSArrayがいくつかあります(NSArrayはsoundView0、soundView1、soundView2、soundView3です)。配列内のUIViewを有効化/無効化するBOOLプロパティを配列全体に関連付けられるようにしたい。
これを達成するための最もクリーンで最も適切な方法は何ですか?
相互に関連付けられたUIViewオブジェクトのコレクションを保持するNSArrayがいくつかあります(NSArrayはsoundView0、soundView1、soundView2、soundView3です)。配列内のUIViewを有効化/無効化するBOOLプロパティを配列全体に関連付けられるようにしたい。
これを達成するための最もクリーンで最も適切な方法は何ですか?
サブクラス化NSArray
は難しい場合があり、追加のプロパティだけが必要な場合は、カテゴリとランタイム関数を使用して別のオプションを利用できます。プロパティを追加するカテゴリをNSArray
記述し、関連付けられたオブジェクトを使用してプロパティのストレージを提供します。このコードで十分です。アプリの命名規則に従って名前を変更するだけです。
@interface NSArray (MyExtensions)
@property (nonatomic) BOOL myProperty
@end
@implementation NSArray (MyExtensions)
static char MyPropertyKey;
- (void)setMyProperty:(BOOL)myProperty
{
objc_setAssociatedObject(self, &MyPropertyKey, @(myProperty), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (BOOL)myProperty
{
NSNumber *propertyNumber = objc_getAssociatedObject(self, &MyPropertyKey);
return [propertyNumber boolValue];
}
@end
NSArray の独自のサブクラスを記述してから、そのサブクラスに BOOL プロパティをアタッチできます