3

いくつかの異なるNSOperationサブクラスを作成する関数があります。

それらはすべて同じパラメータを使用しますが、異なるのはクラス名だけです。

現時点では、関数を介して実行されているコードの繰り返しブロックを持つ関数があります。クラスを関数に渡して、関数がオブジェクトを作成できるようにすることはできますか?

すなわち

- (void)createOperationSubclass:(Class*)class withParam:(int)parameter
{
    class *operation = [[class alloc] init];

    operation.parameter = parameter;

    [self.queue addOperation:operation];
}

またはそのようなもの?つまり、クラスが何であるかを気にしないジェネリッククラスローダー。

その後、私は実行することができます...

[self createOperationSubclass:MyOperationSubclass withParam:10];
[self createOperationSubclass:MyOtherOperationSubclass withParam:5];
4

3 に答える 3

2

if / elseの組み合わせをして、どのクラスで取得したかを確認しないのはなぜですか

if ([myObject isKindOfClass:[AnObject class]]) {
    // create object
}

それははるかに簡単ではないでしょうか?

于 2012-11-12T09:50:44.807 に答える
2

これを試してください:

- (void)createOperationSubclass:(Class)aClass withParam:(int)parameter
{
    id operation = [[aClass alloc] init];

    [operation setParameter:parameter];

    // If your parameter is an NSNumber: [operation setParameter:@(parameter)];

    [self.queue addOperation:operation];
}

次に、次のように呼び出します。

[self createOperationSubclass:[WhateverClass class] withParam:1];

PS:これclassは予約済みのキーワードなので、次のように変更されていることに注意してください。aClass

于 2012-11-12T09:54:57.480 に答える
2

次のようなAPIを使用します-

   NSStringFromClass(Class aClass);

また

NSClassFromString(NSString *aClassName);
于 2012-11-12T10:05:49.783 に答える