当前位置:  开发笔记 > IOS > 正文

在Objective-C中进行线程化

如何解决《在Objective-C中进行线程化》经验,为你挑选了3个好方法。

Objective C中有线程吗?如果是这样,他们如何宣布和使用?

如果有人知道Objective C中的多线程,请与我分享.

感谢致敬.



1> monowerker..:

在新线程中分离方法的简单方法是使用.

+ (void)detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgumentNSThread.如果您没有运行垃圾收集,则需要设置自己的自动释放池.

另一个简单的方法,如果你只是不想阻止主线程是使用.

- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)argNSObject

根据您所使用的并发类型,您还应该看看NSOperation它可以为您提供免费锁定,以便您可以在多个线程之间共享它.



2> Tom Jefferys..:

如果您正在使用Cocoa(即用于mac或iphone)进行开发,则可以访问NSThread可用于多线程的类.谷歌搜索NSThread将找到你的API.

你可以声明它像使用:

NSThread *mythread = [[NSThread alloc] initWithTarget:target selector:selector object:argument];

其中target和selector是你想要启动一个线程的对象和选择器,而argument是一个发送给选择器的参数.

然后使用[mythread start]启动它.



3> Mihir Mehta..:

是的,目标C中存在线程概念,并且在目标C中实现多线程有多种方式.

1> NSThread

[NSThread detachNewThreadSelector:@selector(startTheBackgroundJob) toTarget:self withObject:nil];  

这将在后台创建一个新线程.从你的主线程.

2> 使用performSelector

[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];

如果你从后台线程调用它,将在你的主线程上执行UI任务...你也可以使用

[self performSelectorInBackground:@selector(abc:) withObject:obj];

这将创建一个后台线程.

3> 使用NSoperation

点击此链接

4> 使用GCD

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        [self callWebService];
        dispatch_async(dispatch_get_main_queue(), ^{
            [self updateUI];
        });
    });

callWebService在后台线程中,一旦完成.它将updateUI在主线程中.更多关于GCD的信息

这几乎是iOS中使用的多线程的全部方式.希望这可以帮助.

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有