.m
クラスの実装 ( ) ファイルで宣言されているクラスの名前のないカテゴリ内にそれらを配置することにより、クラスのプライベート プロパティを宣言する可能性について知っています。それは私がやりたいことではありません。
そのクラスにいくつかの機能を追加するクラスの名前付きカテゴリを扱っています。この機能のために、自分のカテゴリで使用するプライベート プロパティがあると非常に役立ちます。そのため、これを実現する通常の方法 (上記) はうまくいかないようです。それともそうですか?教えてください!
.m
クラスの実装 ( ) ファイルで宣言されているクラスの名前のないカテゴリ内にそれらを配置することにより、クラスのプライベート プロパティを宣言する可能性について知っています。それは私がやりたいことではありません。
そのクラスにいくつかの機能を追加するクラスの名前付きカテゴリを扱っています。この機能のために、自分のカテゴリで使用するプライベート プロパティがあると非常に役立ちます。そのため、これを実現する通常の方法 (上記) はうまくいかないようです。それともそうですか?教えてください!
カテゴリの実装ファイル内で、別のカテゴリを宣言して のようMyCategoryName_Private
に呼び出し、そこでプライベート プロパティを宣言します。関連オブジェクトを使用して-propertyName
およびメソッドの実装を提供します。-setPropertyName:
たとえば、実装ファイルは次のようになります。
#import "SomeClass+MyCategory.h"
#import <objc/runtime.h>
@interface SomeClass (MyCategory_Private)
@property (nonatomic, strong) id somePrivateProperty;
@end
@implementation SomeClass (MyCategory_Private)
static void *AssociationKey;
- (id)somePrivateProperty
{
return objc_getAssociatedObject(self, AssociationKey);
}
- (void)setSomePrivateProperty:(id)arg
{
objc_setAssociatedObject(self, AssociationKey, arg, OBJC_ASSOCIATION_RETAIN);
}
@end
@implementation SomeClass (MyCategory)
// implement your publicly declared category methods
@end