扩展UIView并在iOS中添加属性

Mar*_*vec 0 extend uiview ios

我想向UIView添加一个属性.我知道我可以继承一个UIView但是因为我想添加一个属性我想要扩展它.

我试着这样:

@interface UIView (Util)
@property(nonatomic, assign) BOOL isShow;
@end

@implementation UIView (Util)
@dynamic isShow;

-(void)setIsShow:(BOOL)isShow{
    self.isShow = isShow;
}
@end
Run Code Online (Sandbox Code Playgroud)

但它不起作用.它引发了一个例外:Thread 1: EXC_BAD_ACCESS(code=2,address,...)

Iva*_*hev 5

如果要在类别中添加新属性,则必须使用objc_setAssociatedObjectobjc_getAssociatedObject.

例:

NSString *const IS_SHOW_KEY = @"IS_SHOW";

@interface UIView (Util)
@property (nonatomic) BOOL isShow;
@end

@implementation UIView (Util)

- (void)setIsShow:(BOOL)isShow {
    NSNumber *val = @(isShow);
    objc_setAssociatedObject(self, (__bridge const void*)(IS_SHOW_KEY), val, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

- (BOOL)isShow {
    NSNumber *val = objc_getAssociatedObject(self, (__bridge const void*)IS_SHOW_KEY);
    return [val boolValue];
}

@end
Run Code Online (Sandbox Code Playgroud)

请参阅此处的运行时参考文档:https://developer.apple.com/library/ios/documentation/cocoa/reference/ObjCRuntimeRef/Reference/reference.html

  • 谢谢.就是这个.对于所有其他人,你应该包括`#import <objc/runtime.h>` (2认同)