2

私は誰かのコードを維持しなければなりません。コードはスレッドを開きます。iOS (および私が知っている他の言語) のスレッド ワーカー関数は、1 つのパラメーターのみを受け入れます。これを克服するために、コードは配列を作成し、すべてのパラメーターを配列に追加して、それをスレッドに渡します。これがコードです。

NSArray* params = [[NSArray alloc] initWithObjects: mainView, actionFlag, nil];
[self performSelectorOnMainThread:@selector(updateWorker:) withObject:params waitUntilDone:NO];

そして、関数はこのように呼び出されます

-(void)updateWorker:(NSArray*)params
{
    UIView* view = [params objectAtIndex:0];
    bool actionFlag = ((NSNumber*)[params objectAtIndex:1]).boolValue;
    /* do stuff with view and actionFlag */
}

これは非常に多くのレベルで非常に間違っていると私は直観していますが、この場合の有効な議論を構築することはできません.

引数の数を配列として渡すことの欠点は何ですか?

4

2 に答える 2

3

Actually what you are doing is technically correct (but I do understand why it feels wrong).

If you want to feel better, what I would do in this case is instantiate (create) a "NSDictionary" object and then set the objects / values to useful keys and in your "updateWorker" method, fetch the objects via "objectForKey:".

Doing it this way will be easier for you (or somebody else) to maintain in the future, as you won't have to poke around to see what goes in array position 1, array position 2, etc.

于 2012-06-09T08:42:15.323 に答える
2

Most of them are future updates, Some cases (not so rare) may happen:

  • Addition of new parameters to the array
  • changing the order of elements in the array
  • removing elements in the array
  • problems when releasing and retaining elements in the array (not ARC)

One point to note here, is that all of these cases will be hard to debug, since you will be moving from one thread to the other

于 2012-06-09T08:41:50.100 に答える