0

Objective C を使い始めたばかりで、2 つのオブジェクト間の通信に関する質問があります。

私がオブジェクトを持っているとしましょう。これをクラス「Timecode」の main() からインスタンス化されたaTimcodeと呼びましょう。タイムコードで計算を行うメソッドが増えました。

私は 2 番目のオブジェクトを持っています。それをクラス "Video" のaVideoと呼びましょう。これはビデオでいくつかの (openCV) 処理を行います。これも main() で作成されます。

だから私の main() は次のようになります:

Timecode *aTimecode = [[Timecode alloc] init];
Video    *aVideo    = [[Video alloc] init];
[aVideo doFancyOpenCVSTUFF: someparameter];

aVideoがaTimecodeのメソッドを呼び出すようになりました。何かのようなもの

[aTimecode increaseFramesBy: 5];

通信を確立する簡単な方法は、aVideo 内から aTimecode を次のようにインスタンス化することです。

// somewhere within aVideo

Timecode * aTimceode = [[Timecode alloc] init];
[aTimecode increaseFramesBy: 5];
[aTimecode release];

しかしもちろん、これはリリース時に aTimecode に保存されている情報を破壊します。

しかし、プログラムがさらに進むと、多くの Video オブジェクト ( bVideocVideoなど) がaTimecodeの値に寄与し、以前に保存された数値で計算を行う必要があります。aTimecodeは、aVideo がリリースされ、bVideo が何らかの処理を開始した場合でも、それらを保存する必要があります。

正しいコミュニケーション方法とは?代議員?NSNotification?

たとえば、aVideoがaTimecodeに大量のメッセージを送信する状況が考えられます(1 秒間に 10 回以上)。短時間に非常に多くのメッセージを送信する正しい方法は何ですか?

4

2 に答える 2

0

タイムコードオブジェクトが特定のビデオオブジェクトのパラメータである場合、必ずしもリリースする必要はありません。Timecodeオブジェクトを保持するシングルトンクラスを作成し、作成されたすべてのVideoオブジェクトに弱参照を渡すことができます。その後、KVO、NSNotifications、またはデリゲートのいずれかを使用できます。ただし、ここでは委任が最も明確な解決策のように思われます。

于 2012-09-26T11:37:30.307 に答える
0

あなたが説明したことから、クラスinitWithTimecode:でメソッドを作成するのが最も簡単に思えます。Video

これは、他の何かの一部または一部である可能性のあるメソッドではなく、 がメソッドをVideo使用していることを前提としています。それが間違っていて、さまざまなオブジェクト タイプを渡す必要がある場合は、プロトコルとデリゲートを使用します。TimecodeTimecode

Videoが特定のイベントが発生したことを宣言するだけで、他のオブジェクト (または多く) がそれらのイベントに気付いているかどうかを気にしない場合は、通知の方が適切です。

于 2012-09-26T11:34:03.563 に答える