2012-01-26 29 views
4

我在這裏爲我正在開發的iOS應用程序編寫了一些代碼,出於某種原因,每次看起來像一個快速而簡單的任務需要我的iPhone 4S完成第二個或更多工作。爲什麼實例化UIAlertView需要這麼久?

上下文是這樣的...我有一個2按鈕的ActionSheet彈出窗口,如果用戶點擊其中一個按鈕,應用程序似乎停頓了大約一秒鐘。下面的代碼:

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    if (buttonIndex == 0) 
    { 

     UIAlertView* newTimerAlertView = [[[UIAlertView alloc] initWithTitle:@"Create New Timer" 
                    message:@"Enter a name for your new indicator" 
                    delegate:self 
                  cancelButtonTitle:@"Cancel" 
                  otherButtonTitles:@"Create", nil] autorelease]; 
     newTimerAlertView.tag = kNewTimer; 
     newTimerAlertView.alertViewStyle = UIAlertViewStylePlainTextInput; 
     [newTimerAlertView show]; 
    } 
    else if (buttonIndex == 1) 
    { 
     NSLog(@"ActionSheet button 2 tapped"); 
     UIAlertView* newTallyAlertView = [[[UIAlertView alloc] initWithTitle:@"Create New Tally" 
                     message:@"Enter a name for your new indicator" 
                    delegate:self 
                  cancelButtonTitle:@"Cancel" 
                  otherButtonTitles:@"Create", nil] autorelease]; 
     newTallyAlertView.tag = kNewTally; 
     newTallyAlertView.alertViewStyle = UIAlertViewStylePlainTextInput; 
     [newTallyAlertView show]; 
     NSLog(@"end"); 
    } 
} 

着眼於爲簡便起見,第二個按鈕(雖然第一個按鈕的工作方式),日誌是這樣的:

2012-01-25 20:35:46.330 ...[177:707] ActionSheet button 2 tapped 
2012-01-25 20:35:47.194 ...[177:707] end 
2012-01-25 20:35:56.154 ...[177:707] ActionSheet button 2 tapped 
2012-01-25 20:35:56.180 ...[177:707] end 

注意,我第一次嘗試,在代碼片段執行完成之前超過一秒,但第二次(以及所有後續時間)代碼只需要30毫秒左右。

代碼有問題嗎?還是我需要用進度視圖來彌補延遲?

謝謝!

編輯:這隻發生在設備上時,從Xcode運行應用程序...也許這與調試器有關嗎?

+1

如果你關心調試放慢你失望,那麼就使用一些'NSTimeInterval'實例變量,後來記錄它們。例如:'startSecond = [NSDate timeIntervalSinceReferenceDate];'。已知NSLog會導致性能問題。 – NJones

回答

0

Xcode不會在我遇到的任何情況下減慢警報視圖。

你的代碼看起來很普通的香草,所以我懷疑你發佈的代碼片段之外有什麼。

我看到你引用定時器...是可能的這是一個其他東西的表現形式,如定時器回調,在主線程上瘋狂?嘗試使用Time Profiler或系統跟蹤工具來確定什麼是阻塞(當然是)。

+0

我會研究這個,謝謝! –

+0

所以......你在你的應用中使用計時器? –

3

我現在如果警報不是在主線程上,他們可能會推遲

+0

除非文檔中明確允許,否則不應在輔助線程上使用任何UIKit。但我認爲這不是問題 - 操作表委託方法由框架調用,它只會在主線程上執行調用。 –