NSUserDefaultsは非常に便利ですが、キーの名前をハードコードするのは保守性に問題があります。
文字列定数を定義する方法もありますが、僕はカテゴリを作成して、プロパティとしてアクセスするようにしています。
メリットはざっと下記の通りです。
- 型制約がかけられる
- キーとなる文字列が一カ所で定義されるので保守が簡単になる
- キーとなる文字列と、propertyの名前を独立に管理できる
- 必要に応じてgetterをフックできる。
- たとえばキーを変更した場合に、古いキーからも値を読めるようにする
以下サンプルコードです。
メソッド名がppで始まっているのは、僕がカテゴリでメソッドを足す時のルールです。
NSUserDefaults+PPUtils.h
#import <Foundation/Foundation.h>
@interface NSUserDefaults (PPUtils)
@property BOOL ppABool;
@end
NSUserDefaults+PPUtils.m
#import "NSUserDefaults+PPUtils.h"
@implementation NSUserDefaults (PPUtils)
- (BOOL)ppABool
{
return [self boolForKey:@"ppABool"];
}
- (void)setPpABool:(BOOL)ppABool
{
[self setBool:ppABool forKey:@"ppABool"];
}
@end