1

我想问一个关于表格视图和@synchronized结构的问题。didSelectRowAtIndexPath即使用户继续点击表格单元格,我也必须执行一次里面的代码......

我有一张桌子用作游戏中的菜单。我想提供对在didSelectRowAtIndexPath.

我写了以下代码:

//condition = YES in init code

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        @synchronized( self)
        {
            if( !condition)
            {
                NSLog(@"multiple execution is not allowed...");
                return;
            }
            condition = NO;
            ...
            //code
            ...
        }
    }

我在带有 ios 4.3.4 的 ipone 3gs 上对其进行了测试并且工作(我进行了测试并且行为符合预期)但我的客户在安装了 ios 3.x 的 3g 上对其进行了测试,它似乎不起作用。

我考虑过使用 GCD(通过在 中包含代码dispatch_once()),但从 ios 4.x 开始支持它。

@synchronized对我客户的手机为什么无法使用有任何见解吗?

谢谢!

4

1 回答 1

0

@synchronized这里不应该不需要。

  • 您可以期望从主线程进行委托调用(假设您不调用它)。
  • dispatch_once在这里似乎是一个不寻常的选择。如果您确定它很好,请尝试pthread_onceiOS 3。这很奇怪,因为它使用可变的全局状态运行。IOW,“我只想做一张桌子”。
  • 测试 BOOL 很快。

我猜?您的表正在被删除(视图卸载)并且可能无法在重新加载时重新创建。

于 2011-10-22T18:33:14.437 回答