私はvery clever KVO patternのように、セレクタをコンテキストとして渡すことができるメソッドポインタに解決するようにしています。コンテキストとしてメソッドを持つDispatcherパターン
パターンの一部の最後の部分は、私にいくつかのトラブルを与えている:メソッドポインタが逆参照し、一見呼び出され
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
Method m = (Method)context;
(void(*)(id,SEL,id,id,id))(m->method_imp)(owner, m->method_name, keyPath, object, change);
}
具体的に一部。
(void(*)(id,SEL,id,id,id))(m->method_imp)(owner, m->method_name, keyPath, object, change);
私はObjective-CのとCに非常に新しいですし、二つの質問があり、このコンパイルエラーにerror: dereferencing pointer to incomplete type
を得る:上記の構文は何を
- と呼ばれているのですか?私はそれについてもっと読んでみたいです。
- どうすればその回線を機能させることができますか?
私はそれを理解していませんが、文章を2つ以上の行に分けて読みやすくすることができます。それが本当であれば、私はそれがどのように見えるかを見たいと思う。
ありがとう!私はすでにそのインポートを持っていましたが、Objective C 2.0ではstruct objc_methodが利用できないと言う作者から聞いてきました。しかし、セレクタをコンテキストとして渡してobjc_msgSendを使用することは、完璧に機能し、複数のパラメータを渡してNSNotificationのようなラッパーオブジェクトを回避できるという設計目標を達成します。それは非常に大きな+1! –