将相同的消息传递给多个ObjC类

时间:2010-06-22 18:12:05

标签: objective-c loops message-passing class-method

我有多个类,所有这些类都要发送相同的消息。更清楚:

我想发送 doX:withClass:与许多类具有相同的参数。也许代码会更清楚:

+ (void)doX:(NSString *)blah {
     [Utility doX:blah withClass:[Foo class]];
     [Utility doX:blah withClass:[Bar class]];
     [Utility doX:blah withClass:[Baz class]];
     [Utility doX:blah withClass:[Garply class]];
}

我有三种方法在实现特定协议的类上做类似的事情(doX:withClass:方法执行许多步骤,假设给它的类实现了这样的协议)。

我的问题是,如何以编程方式循环遍历类,因此我可以简单地添加到列表中(在代码中 - 对运行时无法添加感兴趣)将其添加到循环中?

2 个答案:

答案 0 :(得分:4)

我的建议是传递NSArrayClass个对象:

 [Utility doX:blah withClasses:[NSArray arrayWithObjects:[Foo class], [Bar class], [Baz class], [Garply class], nil]];

 -(void) doX:(Blah) blah withClasses:(NSArray *) classes {
      //[classes makeObjectsPerformSelector:@selector(doX:) withObject:blah]
      for(Class *someClass in classes) {
         [Utility doX:blah withClass:someClass]; 
      }
}

答案 1 :(得分:1)

不确定你真的想在这里循环。

如果是我,我可能会尝试让Foo,Bar,Baz和Garply扩展一些定义doX的基类。然后你可以让你的基类观察blah并在它改变时调用doX。但也许我不理解你想要做什么。