Hatena::ブログ(Diary)

Kazzzの日記 このページをアンテナに追加 RSSフィード

2012-01-16

[][]oneway void

サンプルコードのreleaseメソッドオーバライドした所、警告が出た。

-(void) release 
{
    //NOOP
}
警告
Warning: Conflicting distributed object modifiers on return type in implementation of 'release'

戻り値の分散オブジェクト修飾子に矛盾がある? なに? 全然分らない。
分らない時はリファレンスということで、本家ドキュメントを読んで見ることにした。

分散オブジェクト
Objective-Cリモートメッセージングには、異なるアドレス空間にあるオブジェクトどうしの接続確立、リモートアドレス空間内のオブジェクトを対象とするメッセージの検出、アドレス空間どうしでのデータ転送を行うことのできるランタイムシステムが必要です。また、2つのタスクの間のスケジュール調整を行う必要があります



同期および非同期メッセージ

しかし、応答を待機することは必ずしも必要なわけではなく、得策でないこともあります。場合によっては、リモートメッセージを単純に送信して戻るだけでよいこともあります。そして、レシーバが可能なときにタスクに取り掛かるのに任せます。その間、送信側は他のことを続けられます。
Objective-Cは戻り型修飾子onewayを指定して、メソッドが非同期メッセージ専用に使用されることを示します。

12章 ランタイムシステム - Objective-C 2.0 プログラミング言語(PDF) より

Objective-Cは元々分散環境でのオブジェクト通信、リモートメッセージングをサポートすることを念頭において設計されているが、その際に送ったきりで戻り値を待機しない非同期メッセージ(oneway)を記述するための予約語として使われているようだ。※

従ってスーパークラスと同じに記述する必要がある。

-(oneway void) release 
{
    //onewayは非分散環境では意味を持たない
}

意味としてはCORBAのoneway通信に近いのだと思う

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/Kazzz/20120116/p1