3

我有一个函数可以创建几个不同的 NSOperation 子类。

它们都使用相同的参数,唯一不同的是类名。

目前我有一个函数,其中有一个重复的代码块在函数中运行。是否可以将 Class 传递给函数,以便该函数可以为我创建对象?

IE

- (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

使用 API,例如 -

   NSStringFromClass(Class aClass);

或者

NSClassFromString(NSString *aClassName);
于 2012-11-12T10:05:49.783 回答
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 回答