無論如何,我可以出來的方法,無論該方法是否完全執行或不。我需要它只能跑4秒。無論如何要做到這一點?做一個方法只能運行一段時間
編輯:
如果我試圖檢查主機這需要太多的時間在檢查的可達性和平均同時,我真的想從可達性的反饋,以進一步我可以在此做什麼去了。 我想取消可達性檢查,如果它需要更多的4秒,我想繼續我的應用程序在離線模式下工作。我真的不希望我的用戶等待一段時間,直到我收到Reachabiltiy的反饋。
無論如何,我可以出來的方法,無論該方法是否完全執行或不。我需要它只能跑4秒。無論如何要做到這一點?做一個方法只能運行一段時間
編輯:
如果我試圖檢查主機這需要太多的時間在檢查的可達性和平均同時,我真的想從可達性的反饋,以進一步我可以在此做什麼去了。 我想取消可達性檢查,如果它需要更多的4秒,我想繼續我的應用程序在離線模式下工作。我真的不希望我的用戶等待一段時間,直到我收到Reachabiltiy的反饋。
你已經更新了你的問題,以澄清你正在處理可達性。我可能會建議如下:
添加您的控制器作爲kReachabilityChangedNotification
的觀察者,如圖Apple's Reachability code。
創建Reachability
對象,並開始通知:
self.hostReach = [Reachability reachabilityWithHostName: @"www.apple.com"];
[self.hostReach startNotifier];
創建4秒NSTimer
。
提供用戶界面,指示您正嘗試與服務器建立連接。例如,您至少需要在界面前觀看一些視圖,以防止用戶與您的應用進行交互,並且您可能需要一個UIActivityViewIndicator
,讓用戶知道該應用正在忙於做些什麼。
等待您的計時器關閉或Reachability
通知觸發。
然後,您可以停止可達性通知程序,刪除您在步驟4中顯示的用戶界面,然後根據需要脫機或聯機進行操作。很明顯,如果你在定時器之前得到了Reachability通知器,你也可能想要你的四秒定時器。
原來的答覆:
您通常需要編寫這樣的事情自己,它取決於你的方法做了什麼。例如,對於NSURLConnection
(您可以設置一個連接的cancel
)的計時器,或者如果您有一個使用for
循環的方法,您可以通過查看CFAbsoluteTimeGetCurrent()
來檢查所用時間,一些較早的價值。我完全依賴於你的方法在做什麼。
另一種方法是將其發送到某個後臺線程,這樣,您可能不會太在意該方法的時間。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// do some time consuming process
dispatch_async(dispatch_get_main_queue(), ^{
// all UI updates should be dispatched back to the main queue
});
});
此外,它完全取決於你想要做的。
你必須自己安排。在您長期運行的方法中,定期檢查「取消」標誌:
while (![context isCancelled] || workIsFinished) {
[self nextPartOfTimeConsumingWork];
}
如果您發現已設置此標誌,請停止工作。然後,您可以在運行定時器的某些外部代碼中設置此標誌。
如果使用NSThread
或NSOperationQueue
併發,你會得到-cancel
和-isCancelled
內置了這裏描述的做完全。
使用方法的一計時器...
NSTimer* myTimer = [NSTimer scheduledTimerWithTimeInterval: 4.0 target: self
selector: @selector(myMethod:) userInfo: nil repeats: NO];
那麼4秒鐘後,你可以調用一個方法來處理離線模式。
在你想約4秒後結束加時賽的方法,你如果計時器無效使用
[NSTimer isValid]
請詳細說明您的需求檢查。我擔心它太普通了..它可以被關閉! – Devarshi
感謝您澄清您的問題。請參閱我的[修改後的答案](http://stackoverflow.com/a/16851316/1271826),其中概述瞭如何使用通知和計時器的組合來實現所需的UX。 – Rob