Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.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
Objective c 如何结合使用NSThread和NSNotification?_Objective C_Ios_Multithreading_Nsnotifications - Fatal编程技术网

Objective c 如何结合使用NSThread和NSNotification?

Objective c 如何结合使用NSThread和NSNotification?,objective-c,ios,multithreading,nsnotifications,Objective C,Ios,Multithreading,Nsnotifications,我正在做一个应用程序,其中来自用户的图像被收集在一起并保存在NSMutableArray中。 只要有一张图片开始出现,我就需要一张一张地将图片上传到服务器上,尽管图片是集中在一起的 我正在使用[NSThread detachNewThreadSelector:@selector(上载:)到target:self with object:imagearray]以逐个上载图像。我需要向用户显示progressview,因为正在逐个上载图像 上传一张图片后如何通知 或者,除了NSThread+NSNo

我正在做一个应用程序,其中来自用户的图像被收集在一起并保存在
NSMutableArray
中。 只要有一张图片开始出现,我就需要一张一张地将图片上传到服务器上
,尽管图片是集中在一起的

我正在使用
[NSThread detachNewThreadSelector:@selector(上载:)到target:self with object:imagearray]以逐个上载图像。我需要向用户显示progressview,因为正在逐个上载图像

上传一张图片后如何通知


或者,除了NSThread+NSNotification之外,还有其他任何场景对此更有用吗

您应该使用通知,以防您不知道有多少侦听器,而您只是发布有关某个内容的通知。在您的情况下,您可能只有一个视图控制器,因此不需要使用通知,所以只需为代理创建一些协议并在视图控制器中实现它。如果需要更新UI,那么还应该使用
performSelectorOnMainThread
调用所有委托方法。我建议使用类似于“委托”范例的方法,但考虑线程而不是对象。因此,上传线程在主线程上进行代理,因为它是进行用户界面更改的线程。 例如,上传线程可以发送部分上传进度的消息

[self performSelectorOnMainThread:@selector(uploadProgression:) 
        withObject:foo waitUntilDone:NO]
或者对于完成的每个完整上载

[self performSelectorOnMainThread:@selector(uploadDidEnd:) withObject:foo
        waitUntilDone:YES]

我想您不必停止上传来更新progessView中的部分进度,但您需要等待上传结束,以免重复启动新上传的上传线程。

是的,我正在调用
[self-performSelectorOnMainThread:@selector(uploadProgression:)withObject:foo waitUntilDone:NO]
仅一次,每次此选择器完成时,它都应调用
[自执行选择器OnMainThread:@selector(uploadDidEnd:)with object:foo waitUntilDone:YES]
,然后再次返回到
uploadProgtession
,并继续arraycount