爲了提高性能,我在後臺線程中爲我的滾動視圖創建子視圖,然後使用performSelectorOnMainThread
將事件發佈到主線程,並將視圖添加到其中的滾動視圖中並將其添加到字體中。不過,我有時會遇到碰撞。在UIScrollview的後臺線程中崩潰
當我檢查我的後臺線程。
if(nil == myView.view.superview)
如何在後臺線程中執行此檢查線程安全。如果我必須在主線程上執行,那麼我需要更改設計,因此可以有辦法將它發佈到主線程並使用返回值。 我對同樣的選擇開放。
TIA,
普利文小號
編輯:
我已經實現UIScrollView的分頁。然而,由於性能問題,並提高用戶界面的響應我移動創建子視圖到使用
[self performSelectorInBackground:@selector(loadPages:) withObject:nil];
在網頁加載不同的線程,我這樣做
if(nil == myView.view.superview)
{
Create the view
[[self performSelectorOnMainThread:@selector(refreshViews:) myView.view waitUntilDone:YES];
}
在刷新視圖我添加子視圖滾動視圖,並把它放在前面。
[myScrollView addSubview:views];
[myScrollView bringSubviewToFront:views];
但是,獲取添加和頁面控制工作正常。滾動是好的,確實很順利。但是,當我快速滾動(快速滑過屏幕)應用程序崩潰。
調試器說崩潰發生在負載頁面if檢查後的obj_msgSend。
編輯:堆棧跟蹤 - 它崩潰在這次檢查@synchronized。出於安全原因,我編輯了崩潰日誌以刪除項目特定的名稱,但跟蹤如下所示。
#0 0x33a06464 in objc_msgSend()
#1 0x314d6984 in -[UIViewController _loadViewFromNibNamed:bundle:]()
#2 0x314d5cb8 in -[UIViewController loadView]()
#3 0x313d6226 in -[UIViewController view]()
#6 0x00009920 in -[myViewController loadPages:] (self=0x12a2a0, _cmd=0x1eac1, abcd=0x0) at
#7 0x302d9198 in -[NSThread main]()
#8 0x302d2248 in __NSThread__main__()
#9 0x3110c88c in _pthread_start()
#10 0x31101a90 in thread_start()
那麼我如何加快我的應用程序的響應速度?你可以請回答我的問題在這裏.. http://stackoverflow.com/questions/5133731/how-to-make-ui-responsive-all-the-time-and-do-background-updating – 2011-03-04 09:01:17