我有一個類ViewController.m
我想在其中設置我的其他類Singleton.m
的屬性,該屬性應自動保存到NSUserDefaults
。在Singleton中用自己的setter覆蓋屬性
我想我必須使Singleton.m
只讀屬性覆蓋setter,但這是最好的方法嗎?如果是的話,我該怎麼做?
我有一個類ViewController.m
我想在其中設置我的其他類Singleton.m
的屬性,該屬性應自動保存到NSUserDefaults
。在Singleton中用自己的setter覆蓋屬性
我想我必須使Singleton.m
只讀屬性覆蓋setter,但這是最好的方法嗎?如果是的話,我該怎麼做?
使屬性爲只讀沒有太大意義(如果我正確理解您的問題)。你可能想要的是:
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 = ...;
將調用自定義設置方法setMyBoolProp
。)
這正是我正在尋找的,但它說'_myBoolProb'未聲明,我應該用'myBoolProb'替換它。這樣做會導致我警告'本地聲明隱藏實例變量'。哦,謝謝,我不知道。 – user2414460
@ user2414460:那麼你的代碼中可能有'@synthesize myBoolProb'。您可以*刪除*該語句,因爲新的編譯器會自動生成'@synthesize myBoolProb = _myBoolProb'。 –
我是否必須在.m文件中聲明屬性?目前,我在.h文件中使用 – user2414460
爲什麼使它只讀? –
所以你必須使用自定義setter,而不能使用點符號 – user2414460
點符號只是調用setter和getter的語法糖,沒有理由有這樣的限制。 – Abizern