iOS用メッセージングライブラリ:MessengerSystem
概要
クラス間親子関係メッセージング用ライブラリ。 フルObjective-C。
オープンソース。
iOSのObjective-CランタイムでサポートされているNSNotificationを利用し、
MVC -MVC 間の接続度を可能な限り疎にする。
このライブラリのインスタンスを持つオブジェクト同士を任意に接続し、
メッセージを投げ合う事が出来る。
また、オマケで、アプリケーション内での接続内容をリアルタイムに可視化する
外部視覚化ビュー、
通信ログを持つ
目標A、タグ:バリュー型での入力を可能にする
Dictionaryをつれ回す形式はそのままだが、
値に対して、文字列型の値を付けられるようにする。
目標B、親子関係の動的指定
親子関係を、子供から親を指定する手法で
設定できるようにする。
複数の親は許容しない。
複数の同名の子供が存在する事を許容する。
目標C、メソッドの外部呼び出し
メソッドのポインタを渡し、受け取り側から遠隔実行できるようにする
目標D、可視化
つながりを可視化する
可視ビューを作り出し、各インスタンスの関係、つながりを表示できるようにする。
目標E、ログ取り
通信記録を取れる/見れるようにする。
目標F、遅延実行、遠隔実行
遅延実行をタグ設定で実行できるようにする。
DL
GitHubにアップロードされている。
doxygenにて作成、添付
使用法
- (id) initWithBodyID:(id)body_id withSelector:(SEL)body_selector withName:(NSString * )name
MessengerSystem * child_0 = [[MessengerSystem alloc] initWithBodyID:self withSelector:@selector(testChildMethod:) withName:TEST_CHILD_NAME_0];
とあるクラスA
MessengerSystem * child_0 = [[MessengerSystem alloc] initWithBodyID:self withSelector:@selector(testChildMethod:) withName:TEST_CHILD_NAME_0];
nil];
nil];
parentインスタンスを持っているクラス
NSMutableDictionary * dict = (NSMutableDictionary *)[notification userInfo];
NSString * exec = [parent getExecAsString:dict];
if ([exec isEqualToString:@"テスト"]) {
//やりたい事
}
}
childインスタンスを持っているクラス
NSMutableDictionary * dict = (NSMutableDictionary *)[notification userInfo];
NSString * exec = [child_0 getExecAsString:dict];
if ([exec isEqualToString:@"テスト"]) {
//やりたい事
}
}
kvsでの値受け渡しが可能。
[child_0 callParent:TEST_EXEC_3,
[child_0 tag:@"タグ" val:値],
nil];
5.遅延実行、遠隔実行
[parent call:TEST_CHILD_NAME_0 withExec:@"テスト",
[parent withDelay:0.3],
nil];
child_0 → parent 遠隔実行
[child_0 callParent:TEST_PARENT_INVOKE,
[child_0 withRemoteFrom:self withSelector:@selector(sayHello:)],
nil];
受け取ったparent側で、引数だけを渡して実行!
- (void) testParentMethod:(NSNotification * )notification {
NSMutableDictionary * dict = (NSMutableDictionary *)[notification userInfo];
NSString * exec = [parent getExecAsString:dict];
if ([exec isEqualToString:TEST_PARENT_INVOKE]) {
[parent remoteInvocation:dict, @"遠隔実行で親から子供の、子供から指定されたメソッドを実行しています。", nil];
}
}
[parent removeAllChild];
0 件のコメント:
コメントを投稿