你可以尝试使用动态的Getter和Setter声明如此答案中所述。
首先创建通用函数,你想让所有属性都使用它们:
- (id)_getter_
{
return [[NSUserDefaults standardUserDefaults] objectForKey:NSStringFromSelector(_cmd)];
}
- (void)_setter_:(id)value
{
[[NSUserDefaults standardUserDefaults] setObject:object forKey:YourParsedOutKey];
[[NSUserDefaults standardUserDefaults] synchronize];
}
然后创建动态方法生成器:
+(void)synthesizeForwarder:(NSString*)getterName
{
NSString*setterName=[NSString stringWithFormat:@"set%@%@:",
[[getterName substringToIndex:1] uppercaseString],[getterName substringFromIndex:1]];
Method getter=class_getInstanceMethod(self, @selector(_getter_));
class_addMethod(self, NSSelectorFromString(getterName),
method_getImplementation(getter), method_getTypeEncoding(getter));
Method setter=class_getInstanceMethod(self, @selector(_setter_:));
class_addMethod(self, NSSelectorFromString(setterName),
method_getImplementation(setter), method_getTypeEncoding(setter));
}
然后设置您想要为其创建动态getter和setter的字符串:
+(void)load
{
for(NSString*selectorName in [NSArray arrayWithObjects:@"name", @"anything", @"else", @"you", @"want",nil]){
[self synthesizeForwarder:selectorName];
}
}
这将为您添加到数组中的任何变量名称创建getter和setter。我不确定当其他类尝试调用这些方法时,这个方法是否能很好地工作,编译器在编译时不会看到它们,因此在尝试使用它们时可能会抛出错误。我只是将另外两个StackOverflow问题合并成了一个答案,以适应您的情况。
动态获取器和设置器。
获取当前方法名称。