1
我想問一個關於表視圖和@synchronized
構造的問題。 我必須執行didSelectRowAtIndexPath
裏面的代碼一次,即使用戶不斷點擊表格單元格...同步訪問UITableViewDelegate邏輯
我有一個表格用作遊戲中的菜單。我想提供對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和工作(我做了測試,並如預期的行爲),但我的客戶測試了他的3克與ios 3.x安裝,它似乎不工作。
我想在使用GCD(通過在dispatch_once()
中包含代碼),但它從ios 4.x開始支持。
對於@synchronized
爲什麼@synchronized
在我的客戶手機上不起作用,您有沒有任何見解?
謝謝!
謝謝你的回答。我想過使用dispatch_once來找到一種方法來執行一次與錶行關聯的代碼。我通過在didSelectRowAtIndexPath實現中設置了一個斷點來驗證問題,並且在斷點處停下來時,我再次敲入另一個線程,並進入了didSelectRowAtIndexPath,因此我發現自己的競爭條件。 – notsoux
嗯......不知道該說什麼如果你確定只從主線程調用它。你有機會*禁用* objc或C++異常?如果是這樣,請嘗試啓用它們。通常情況下,我只是將邏輯推出到一個單獨的方法。否則,程序的其他部分可能不是線程安全的,或者您可能正在以非常規方式進行初始化和銷燬。 – justin