如果我在类别实现中使用objc_setAssociatedObject/objc_getAssociatedObject将模拟实例变量存储在setter方法中,那么我将如何访问getter方法中的键,因为setter方法中声明的任何变量都不在getter方法的范围内?
编辑:为了澄清,如果我使用以下模式,我应该在哪里声明STRING_KEY,以便我可以在setter和getter方法中使用它.
@interface NSView (simulateVar)
-(void)setSimualtedString:(NSString *)myString;
-(NSString *)simulatedString;
@end
@implementation NSView (simulateVar)
-(void)setSimualtedString: (NSString *)myString
{
objc_setAssociatedObject(self, &STRING_KEY, myString, OBJC_ASSOCIATION_RETAIN);
}
-(NSString *)simulatedString
{
return (NSString *)objc_getAssociatedObject(self, &STRING_KEY);
}
@end
Run Code Online (Sandbox Code Playgroud) 需要创建一个带有新变量的类别(类型为NSArray).
OriginalClass + Extension.h:
@interface OriginalClass (Extension) {
NSArray *_array;
}
@property (nonatomic, retain) NSArray *array;
@end
Run Code Online (Sandbox Code Playgroud)
但我得到了错误:Cannot declare variable inside @interface or @protocol.
请帮忙解决问题.