【非凡プログラマー】設計モード、kvc、kvo
2012 ワード
2.プログラムライフサイクル全体にわたって存在するメモリが1つしかなく、複数のオブジェクト間でデータを共有できる単一のモード、すなわちCのグローバル変数
static id myManager;
+ (id) themeManager{
if (myManager == nil ){
myManager = [[self alloc] init];
}
return myManger;
}
2.エージェントモード
1.他人に何かを依頼し、その中に双方が共同で守る合意を加えるのが代理です.
2.オブジェクト間の通信に使用します.
3.オブジェクトの動作を簡略化し、オブジェクト間の結合度を最大化するエージェントを使用すると、一般的にサブクラス化を必要とせず、アプリケーションの開発を簡素化し、容易に実現でき、柔軟になります.
4.宣言エージェント@property(nonatomic,strong)id<プロトコル名>オブジェクト名;呼び出しエージェント[self.オブジェクト名cure];医者の治療例を借りて最後に代理店を縛り、医者に患者を診察させる.
練習:医者が病気を治す目覚まし時計タイマー
アラームタイマー
プロキシモード、NSTimer、NSDateを使用
NSDate *date1=[NSDate date];
NSDateFormatter *date=[[NSDateFormatter alloc]init];
[date setDateFormat:@" HH mm "];
NSString *str1=[date stringFromDate:date1];
NSTimerは先にクラスにいます.h内声明
@property (nonatomic , assign)NSTimer *times;
インプリメンテーション
_times = [NSTimer scheduledTimerWithTimeInterval:1.0F target:self selector:@selector(knock) userInfo:nil repeats:YES];
ていし
[_times invalidate];
2.KVCの学習KVC-キー値符号化
値の取得と変更
valueForKey:
valueForKeyPath:
setValue:forKey:
setValue:forKeyPath:
これらのメソッドを呼び出し、オブジェクトにメッセージを送信し、アクセスするプロパティ名のキーをパラメータとして渡します.
3.KVO-キー値リスニング
作成対象の属性が変更されると、対象に通知が届きます.
a.登録
観察者を1人増やす
[_children addObserver:self forKeyPath:"hapyValue" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:"context”];
b.コールバック
クラスで実現
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(voidvoid *)context
c.値の変更
d.廃棄
[_children removeObserver:self forKeyPath:@“hapyValue”];
注意:オブジェクトの追加とオブジェクトのキャンセルは必ずペアで表示されます.
マルチステート:親ポインタが子を指す