Cocoaは、非同期操作のためのコールバックメソッドを提供するために、代理人を広範囲に使用します。しかし、私は個人的にはデリゲートモデルを嫌い、どのように非常に特殊な子演算のハンドラを使って現在のクラスを汚染しているのですか。 UIAlertView
は完璧な例です。Objective-Cで匿名の代理オブジェクトを作成する
したがって、ブロックを介してデリゲートプロトコル(例えばUIAlertViewDelegate
など)の要件を満たす匿名デリゲートオブジェクトを作成し、デリゲート参照が必要な場合はどこでもこの匿名オブジェクトを渡すことができますか?
私はそうのようなものを想像:
id myDelegate = @{
alertView:alertView didDismissWithButtonIndex:index =^{
...
}
};
UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:... message:... delegate:myDelegate cancelButtonTitle:... otherButtonTitles:...;
[alertView show];
私が聞いたのObjective-Cは、いくつかの良好な動的言語機能を持っていますが、私は単にオブジェクトにメソッド/セレクターを追加する方法がわかりません。これは比較的簡単な方法で行うことができますか?
1か月前の完全に汎用的な代議員に関する質問があります:http://stackoverflow.com/q/15438410/603977、どこかで 'UIAlertViewDegate'に固有の古い質問がありますが、瞬間 –
もちろん、デリゲート用に全く異なるオブジェクトを作成することはできます。それは、例えばあなたのViewControllerである必要はありません。 (しかし、Objective-Cブロックは私の頭を爆発させるので避けている。) –
Apple側は、Mac側のNSOpenPanelのように、ブロックベースのAPIをUIAlertViewのようなものに追加してくれることを願っている。 –