同步访问UITableViewDelegate逻辑

时间:2011-10-22 09:22:58

标签: iphone ios synchronized didselectrowatindexpath uitableview

我想问一个关于表格视图和@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上测试了它,似乎无法正常工作。 / p>

我想过使用GCD(通过将代码放在dispatch_once()中),但是从ios 4.x开始支持它。

您是否了解为什么@synchronized无法在我的客户手机上运行?

谢谢!

1 个答案:

答案 0 :(得分:0)

@synchronized不应该在这里不需要。

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

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