Iphone UIScrollview中的后台线程崩溃
为了提高性能,我正在后台线程中为我的滚动视图创建子视图,然后使用Iphone UIScrollview中的后台线程崩溃,iphone,objective-c,multithreading,performance,uiscrollview,Iphone,Objective C,Multithreading,Performance,Uiscrollview,为了提高性能,我正在后台线程中为我的滚动视图创建子视图,然后使用performselectornmainthread将事件发布到主线程,并将视图添加到其中的滚动视图中,并将其设置为字体。但是我有时会撞车 当我在我的后台线程中检查这个时 if( nil == myView.view.superview) 如何在后台线程中执行此线程安全检查。如果我必须在主线程上执行,那么我需要大量更改设计,因此可以有一种方法将其发布到主线程并使用返回值。 我愿意接受同样的选择 蒂亚 普拉文S 编辑: 我已经用分页
performselectornmainthread
将事件发布到主线程,并将视图添加到其中的滚动视图中,并将其设置为字体。但是我有时会撞车
当我在我的后台线程中检查这个时
if( nil == myView.view.superview)
如何在后台线程中执行此线程安全检查。如果我必须在主线程上执行,那么我需要大量更改设计,因此可以有一种方法将其发布到主线程并使用返回值。
我愿意接受同样的选择
蒂亚
普拉文S
编辑:
我已经用分页实现了UIScrollview。但是,由于性能问题和提高UI的响应能力,我将使用
[self performSelectorInBackground:@selector(loadPages:) withObject:nil];
在加载页面中,我执行以下操作
if( nil == myView.view.superview)
{
Create the view
[[self performSelectorOnMainThread:@selector(refreshViews:) myView.view waitUntilDone:YES];
}
在刷新视图中,我将子视图添加到scrollview,并将其置于前面
[myScrollView addSubview:views];
[myScrollView bringSubviewToFront:views];
但是,get added和page控件工作正常。滚动可以很平滑。但是当我快速滚动它(以快速方式在屏幕上滑动)时,应用程序崩溃
调试器说,在loadpages中的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 ()
除非另有特别标记,否则UIKit不是线程安全的。不支持在后台创建视图(和加载NIB);任何涉及UIView的操作都需要在主线程上进行。这甚至在您的视图添加到superview之前就适用了。那么,如何加快应用程序的响应速度呢?你能在这里回答我的问题吗。。