Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone UIScrollview中的后台线程崩溃_Iphone_Objective C_Multithreading_Performance_Uiscrollview - Fatal编程技术网

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之前就适用了。

那么,如何加快应用程序的响应速度呢?你能在这里回答我的问题吗。。