我想问一个关于表格视图和@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
无法在我的客户手机上运行?
谢谢!
答案 0 :(得分:0)
@synchronized
不应该在这里不需要。
dispatch_once
似乎是一个不寻常的选择。如果您确定它是好的,请尝试iOS 3的pthread_once
。这很奇怪,因为它使用可变的全局状态运行。 IOW,“我只想制作一张桌子。”我的猜测?您的表正在被删除(查看卸载),并且可能无法在重新加载时重新创建。