ページ

2009年3月13日金曜日

Screen 改良

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

Screenクラスを改良する。具体的にはシングルトンパターンでインスタンスを作り、それを使い回すようにした。

全画面の範囲は今まではクラスメソッドで取り出していた。

+ (NSRect)frame;

呼出し毎に範囲を計算していた。

これをやめてインスタンス化し、1度計算した値を使い回すようにした。

@interface Screen : NSObject {
NSRect _frame;
}
+ (Screen*)defaultScreen;
- (NSRect)frame;


実装はこんな感じ。
static Screen* _screen = nil;
+ (Screen*)defaultScreen
{
if (!_screen) {
_screen = [[Screen alloc] init];

[[NSNotificationCenter defaultCenter] addObserver:_screen
selector:@selector(screenChanged:)
name:NSApplicationDidChangeScreenParametersNotification
object:nil];
[_screen update];
}
return _screen;
}


スクリーンの構成が変わった時を考慮して NSApplicationDidChangeScreenParametersNotification を受け取るようにしている。この通知を受け取ったら範囲を更新する。

- (void)screenChanged:(NSNotification *)notification
{
[self update];
}