Objective c 如何在命名类别中声明私有属性?

Objective c 如何在命名类别中声明私有属性?,objective-c,properties,private,objective-c-category,associated-object,Objective C,Properties,Private,Objective C Category,Associated Object,我知道可以通过将私有属性放在类的实现(.m)文件中声明的类的未命名类别中来声明该类的私有属性。那不是我想做的事 我正在处理一个类上的命名类别,该类别为该类添加了一些功能。对于这个功能,在我的类别中使用一个私有属性会对我有很大帮助,所以实现这个功能的通常方法(如上所述)似乎对我不起作用。还是这样?请开导我 在类别的实现文件中,声明另一个类别并将其称为类似于MyCategoryName_Private的东西,然后在那里声明您的私有属性。使用关联对象提供-propertyName和-setProper

我知道可以通过将私有属性放在类的实现(
.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
#导入“SomeClass+MyCategory.h”
#进口
@接口SomeClass(MyCategory_Private)
@属性(非原子,强)id somePrivateProperty;
@结束
@实现SomeClass(MyCategory_Private)
静态void*AssociationKey;
-(id)私人财产
{
返回objc_getAssociatedObject(self,AssociationKey);
}
-(void)setSomePrivateProperty:(id)arg
{
objc_setAssociatedObject(self、AssociationKey、arg、objc_ASSOCIATION_RETAIN);
}
@结束
@实现类(MyCategory)
//实现公开声明的类别方法
@结束

Yahey,非常感谢!这正是我一直在寻找的!也许有些人会认为这不是最好的编码实践,把一个类别完全放进一个.m文件中,但无论如何,这解决了我的问题,使事情变得更容易我::美丽。非常感谢。如果我想拥有更多的私有属性,我想我应该创建更多的AssociationKey?