使用数组将多个参数传递给函数

时间:2012-06-09 08:37:16

标签: ios design-patterns

我必须维护一个人的代码。代码打开一个线程。 iOS中的线程工作器函数(以及我所知的任何其他语言)只接受一个参数。为了克服这个问题,代码创建了一个数组,将所有参数添加到数组中并将其传递给线程。这是代码。

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 */
}

我有一种直觉,认为这在很多层面都是错误的,但无法为这种情况建立一个有效的论据。

将数量的参数作为数组传递有什么缺点?

2 个答案:

答案 0 :(得分:3)

实际上你正在做的是技术正确(但我明白为什么感觉不对)。

如果你想要感觉更好,在这种情况下我要做的是实例化(创建)一个“NSDictionary”对象,然后将对象/值设置为有用的键和“updateWorker “方法,通过”objectForKey:“获取对象。

这样做对于你(或其他人)将来更容易维护,因为你不必四处寻找数组位置1,数组位置2等的内容。

答案 1 :(得分:2)

其中大多数是未来的更新, 有些情况(不是很罕见)可能会发生:

  • 向数组中添加新参数
  • 更改数组中元素的顺序
  • 删除数组中的元素
  • 在阵列中释放和保留元素时的问题(不是ARC)

这里需要注意的一点是,所有这些情况都很难调试,因为你将从一个线程转移到另一个线程