我希望覆盖setter和getter,并且不需要单独为每个属性查找objc_property_t
的类。
我可以这样获取所有属性:
unsigned int numberOfProperties;
objc_property_t *propertyArray = class_copyPropertyList([self class], &numberOfProperties);
for (NSUInteger i = 0; i < numberOfProperties; i++) {
objc_property_t property = propertyArray[i];
NSString *name = [[NSString alloc] initWithUTF8String:property_getName(property)];
property.getter = SEL; //?
}
这是一个我想要覆盖getter和setter的示例 - 如果有更好的方法,请告诉我。可能可以使用NSInvocation?
- (UIImage *)backgroundImage
{
return [self overrideGetterWithSelector:NSStringFromSelector(_cmd)];
}
- (void)setBackgroundImage:(UIImage *)backgroundImage
{
[self overrideSetterForObject:backgroundImage forSelector:NSStringFromSelector(_cmd)];
}
还有一种方法可以拦截发送到类的所有消息吗?
我的目标是创建一种通用方式,在启动之间存储类的属性。你可能想问为什么我不使用NSUserDefaults
或NSKeyedArchiver
。好吧,我正在使用NSKeyedArchiver
- 我不想手动覆盖每个setter和getter。