2015-10-29 57 views
0

在我的ViewController中,我從mySQL服務器聯機加載我的TableView數據。 當我按下加載ViewController的按鈕時,加載ViewController需要時間。在加載數據之前加載ViewController是IOS

雖然我的數據viewDidLoad方法後,被稱爲..

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    MyArray = [[NSMutableArray alloc]initWithCapacity:10]; 
    MyData = [NSUserDefaults standardUserDefaults]; 

    MySqlDataBase *mySql = [[MySqlDataBase alloc]init]; 
    MyArray = [mySql doQueryGetArray:@"SELECT * FROM member" ForDataBaseWithName:@"Estifta"]; 
    NSLog(@"%@",[[MyArray objectAtIndex:0]objectForKey:@"text"]); 
    [_myTabeView reloadData]; 
} 
+0

究竟是什麼問題? – longbow

回答

0

viewDidLoad當你的視圖被加載到內存中,但之前顯示在屏幕上的視圖被調用。 viewDidLoad中的代碼在mainThread(UIThread)上運行,因此會減慢屏幕上顯示的視圖。

作爲解決方案,您可以將長時間運行的部件調度到後臺隊列(使用dispatch_async),然後重新加載主線程上的tableview。

__weak typeof(self) weakSelf = self; 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
MySqlDataBase *mySql = [[MySqlDataBase alloc]init];   
MyArray = [mySql doQueryGetArray:@"SELECT * FROM member" ForDataBaseWithName:@"Estifta"]; 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      [weakSelf.myTabeView reloadData]; 
     }); 
    }); 
+0

這裏你不需要對'self'的弱引用。 – rmaddy

+0

@rmaddy - 我認爲這取決於異步SQL查詢的持續時間。在某些情況下,可能會發生這樣的情況,我們認爲* self *的引用超過了必要的時間。因此,我認爲對自己的參照只是一點點清晰。 – blacky85

+0

好點。如果視圖控制器在查詢完成前被解散,那麼使用弱自我就是一個很好的理由。我只是想着它的使用,以防止一個參考週期,這是不是該代碼的問題。 – rmaddy

相關問題