0

私はプログラムを書いていて、スレッドやマルチプロセッシングなどについてもっと学ぼうとしています。

私のアーキテクチャはModel/View/Controllerタイプです。

私はNSImageView(ThumbnailView)の独自のサブクラスを持っており、賢くなり、メッセージをリッスンして自分自身をクリアしたいと思っていました(したがって、すべてのサムネイルは、ループすることなくクリアされます)。

問題は、実際にメッセージをリッスンしているThumbnailViewaによって制御されていることです。ThumbnailViewControllerメッセージを受け取ると、コマンド()であるクラスオブジェクトを使用して新しいスレッドをスピンオフしますClearThumbnailViewCommandThumbnailView関連するオブジェクトとキーを含む辞書アイテムを引数として渡します。ClearThumbnailViewCommandI内で、ThumbnailViewオブジェクトの画像をニュートラルな画像(gray.jpgなど)に設定しました。

これはすべて正常に機能しますが、変更されたサムネイルオブジェクトは、入力されたサムネイルオブジェクトと同じではありません。したがって、オブジェクトではなくポインタを渡す必要があると思います。通り過ぎるのでMyObject**はなく使うことについて何か覚えていますが、さまざまな組み合わせを解くことができないようです。それを推論することができなかったので、私は物事のランダムな組み合わせを試すという、通常は絶対確実なシステムに戻りましたが、今回は役に立ちません。 MyObject*&MyObject

NSDictionaryポインタを渡すクラスを作成できたとしても(これらの用語を正しく使用しているかどうかはわかりません)、を必要としないに正しく割り当てることができないようですid**

それが役に立ったら、以下の基本を含めてみます。


ThumbnailVew : NSImageView {
    ThumbnailVewController  * _controller;
}

init  {
    _controller = [[ControllerClass alloc] initWithControlObject: &self];
}

ThumbnailVewController : ControllerClass {
    id  ** _controlObject;
}

initWithControlObject: (id**)object {
    _controlObject = object;
}

次に、メッセージが投稿さThumbnailVewControllerれると、最終的にこれを行うメソッドが呼び出されます…もちろん、これは私に渡させません&_controlObject

渡すことができるようにすべて書き直された場合_controlObject、エラーは発生しませんが、ThumbnailView変更するのはメソッドに対してのみローカルです。

if([command isEqualToString:@"CLEAR_THUMBNAILS"]) {
    NSDictionary * dict;
    dict = [[NSDictionary alloc] initWithObjectsAndKeys: &_controlObject, @"thumbnail", nil];

    [self newThreadWithCommand:[[[ClearThumbnailViewCommand alloc] initWithArgument:dict] autorelease]];
}

これも可能ですか?

4

1 に答える 1

0

フィードバックをお寄せいただきありがとうございます。私は確かに、いくつかのさまざまな状況を調査しようとしています。いくつかのことを達成するために一周するかもしれないことは理解していますが、それは境界をより明確に理解するのに役立ちます.

他の誰かを助けるかもしれない場合に備えて、私は特定の問題の解決策を見つけました. 結局のところ、ThumbnailView の初期段階で _controlObject への参照を作成していました。そのフェーズで作成されるオブジェクトは、awakeFromNib が呼び出されたときに作成される ThumbnailView オブジェクトとは異なります。

_controlObject 割り当てを awakeFromNib メソッドに移動すると、すべてが期待どおりに機能します。(もちろん、派手な ** および & 宣言を含まないようにコードをリセットしました。

繰り返しますが、この言語についてもう少し理解するのを手伝ってくれてありがとう。私はそれがかなり好きになり始めています。

于 2012-10-12T06:12:20.693 に答える