通过类别添加BOOL属性

Mac*_*ace 17 cocoa properties categories

我正在使用一个类别NSAttributedString (Additions),我真的需要一种方法来添加一个属性BOOL(指示字符串是否是HTML标记).我知道类别不应该有属性,但这就是我需要的方式.我累了写自己的吸气剂和制定者,但它没有用.这怎么办?

Jos*_*sen 43

为了完整起见,我就是这样做的:

@接口

@interface ClassName (CategoryName)
@property (readwrite) BOOL boolProperty;
@end
Run Code Online (Sandbox Code Playgroud)

@implementation

#import <objc/runtime.h>

static char const * const ObjectTagKey = "ObjectTag";
@implementation ClassName (CategoryName)
- (void) setBoolProperty:(BOOL) property
{
    NSNumber *number = [NSNumber numberWithBool: property];
    objc_setAssociatedObject(self, ObjectTagKey, number , OBJC_ASSOCIATION_RETAIN);
}

- (BOOL) boolProperty
{
    NSNumber *number = objc_getAssociatedObject(self, ObjectTagKey);
    return [number boolValue]; 
}
@end
Run Code Online (Sandbox Code Playgroud)


jrt*_*ton 4

类别可以具有只读属性,您只是不能使用它们添加实例变量(嗯,您可以,有点 - 请参阅关联引用)。

您可以添加一个类别方法(由只读属性表示),isHTMLTag该方法将返回 BOOL,您只需在该方法中每次计算它是否是 HTML 标记即可。

如果您要求设置BOOL 值的方法,那么您将需要使用objc_setAssociatedObject我从未使用过的关联引用 ( ),因此我觉得没有资格更详细地回答。

  • @Mace — 您可以接受 jrturton 的答案,并添加约书亚的详细信息,还是接受约书亚的答案......? (3认同)