2

我必须维护某人的代码。代码打开一个线程。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 */
}

我有一种直觉,这在很多层面上都是非常错误的,但无法为这个案例建立一个有效的论据。

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

4

2 回答 2

3

实际上,您所做的在技术上是正确的(但我确实理解为什么感觉不对)。

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

这样做对您(或其他人)来说将来会更容易维护,因为您不必四处寻找阵列位置 1、阵列位置 2 等中的内容。

于 2012-06-09T08:42:15.323 回答
2

其中大部分是未来的更新,可能会发生一些情况(不是那么罕见):

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

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

于 2012-06-09T08:41:50.100 回答