質問: iphoneアプリの機能をいくつかに分けて、それぞれ異なるモジュール化していきたいと考えております。 Objective-Cのモジュールには、Callback関数を使うことが可能ですか? 例えば、GPSの情報を受け取るモジュールは、位置情報を受け取って、その位置情報を外部の処理関数へ渡します。外部処理関数名など、GPS関連モジュールから切り離したい。 例: ``` somefunction(){ GPSmodules(param1, function(position ) { xxx } ); } ``` 例えば、上記のように、外部の`somefunction`からGPSモジュールを使って、Callback形で、`position` を受け取って、処理することが出来ればと考えております。
回答: (「モジュール」と言うのはApple製の開発環境では特別な意味を持つので、できれば他の言い方にされた方がいいのではないかと思います。) Objective-Cでは、C言語型の関数ポインタの受け渡しが可能ですので、その形でのcallback関数の受け渡しは可能です。 また最近のObjective-Cではblock(「ブロック構造言語」なんていう場合のブロックではなく、Objective-C用語で、他言語のクロージャーに近い存在)が使えますので、そちらの方があなたが示された(JavaScript風のクロージャー?)コードに近い書き方ができるでしょう。 「ほとんどの部分がC/C++でC言語版のAPIを呼び出す形で書かれている」と言ったような特殊な事情がない限り、前者のC言語型の関数ポインタをこれから開発するアプリに採用することはお勧めできませんので、「(Objective-Cの)blockが使える」というのがあなたのご質問の意図に一番近い形での回答と言えるかもしれません。 ただ、せっかくオブジェクト指向言語を使うのですから、あなたが本当にやりたいことを実現する場合には、クラスを絡ませてオブジェクト指向風に解決した方が美しいかもしれません。 とりあえずあなたの質問に関する回答としては「yes」ですが、本当にそれを採用した方が良いかどうかは、もう少し情報を提供してもらわないとなんとも言えない、と言ったところです。