我有一个班级ViewController.m
我要设置其他班级Singleton.m
的属性,该属性应自动保存到NSUserDefaults
。
我想我必须在Singleton.m
中只读取属性并覆盖setter,但这是最好的方法吗?如果是,我该怎么做?
答案 0 :(得分:2)
将属性设置为只读没有多大意义(如果我正确理解您的问题)。你可能想要的是:
init
方法,以便在用户默认值时加载属性
单例实例化,示例: Singleton.h:
#import <Foundation/Foundation.h>
@interface Singleton : NSObject
+(instancetype)sharedSingleton;
@property (nonatomic) BOOL myBoolProp;
@end
<强> Singleton.m:强>
#import "Singleton.h"
@implementation Singleton
static NSString *kMyBoolPropKey = @"MyBoolProp";
+(instancetype)sharedSingleton
{
static Singleton *sharedInstance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}
-(id)init
{
self = [super init];
if (self) {
_myBoolProp = [[NSUserDefaults standardUserDefaults] boolForKey:kMyBoolPropKey];
}
return self;
}
-(void)setMyBoolProp:(BOOL)myBoolProp
{
_myBoolProp = myBoolProp;
[[NSUserDefaults standardUserDefaults] setBool:myBoolProp forKey:kMyBoolPropKey];
}
@end
(注意两者
[[Singleton sharedSingleton] setMyBoolProp:...];
[Singleton sharedSingleton].myBoolProp = ...;
将调用自定义setter方法setMyBoolProp
。)