iPhone:创建另一个线程并执行一些进程

iPhone:创建另一个线程并执行一些进程,iphone,concurrency,Iphone,Concurrency,我想从主线程中创建一个单独的线程,并在那里执行一些进程。例如:当我浏览我的应用程序屏幕(导航控制器、视图控制器等)时,我还希望有另一个线程,在某些上传过程中应该在后台进行 如何在iOS开发中实现这一点?请引导我 谢谢大家! 您可以通过NSOperation来实现这一点。请仔细阅读。以下是一段代码,让您开始学习 // start a new thread: [NSThread detachNewThreadSelector:@selector(onNewThread) toTarg

我想从主线程中创建一个单独的线程,并在那里执行一些进程。例如:当我浏览我的应用程序屏幕(导航控制器、视图控制器等)时,我还希望有另一个线程,在某些上传过程中应该在后台进行

如何在iOS开发中实现这一点?请引导我


谢谢大家!

您可以通过NSOperation来实现这一点。请仔细阅读。

以下是一段代码,让您开始学习

    // start a new thread:
    [NSThread detachNewThreadSelector:@selector(onNewThread) toTarget:self withObject:nil];

- (void) onNewThread{
    // do stuff on new thread
}

有很多选项,太多了,无法详尽列出,但可能只填充一个附加线程的最简单方法是

还可以将东西推回到UIKit的主线程,以及将选择器分派到特定的其他线程的各种其他方法

如果要调整优先级或以更具体的方式填充线程,可以直接与联系。在这两种情况下都要小心,因为除非您自己创建一个自动释放池,否则您的后台线程中不会有自动释放池

如果你计划发布大量的线程,你可能会推到一个新的线程。操作队列确保按照设备拥有的CPU和内核数量,以最佳方式将操作分发到后台线程


你应该完全确定你想要一个背景线程。作为一般的经验法则,如果某个东西能够同步或异步运行,并发送到主线程,则后者是更有效的处理方式,尤其是在电池寿命方面。新的基于块的异步方法在编写本应执行简单线性操作的事件驱动代码方面花费了大量精力,所以如果您可以坚持iOS 4及以上版本,请查看这些方法。

如果您的目标是iOS 4.0+,我强烈建议使用和块

- (IBAction)grabURLInBackground:(id)sender
{
   NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
   __block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
   [request setCompletionBlock:^{
      // Use when fetching text data
      NSString *responseString = [request responseString];

      // Use when fetching binary data
      NSData *responseData = [request responseData];
   }];
   [request setFailedBlock:^{
      NSError *error = [request error];
   }];
   [request startAsynchronous];
}

它的使用非常简单,并且异步运行所有查询(默认)。

您好,谢谢。无论是“detachNewThreadSelector”(或“performSelectorInBackground”,我都应该使用哪个选项。请告知。我想知道这个线程是如何创建的?是否总是(每个间隔)调用此func并执行每次启动线程所需的进程。如果需要,如何停止此线程运行?您好,谢谢。无论是“detachNewThreadSelector”(或“performSelectorInBackground”,我都应该使用哪个选项。请告知。我想知道这个线程是如何创建的?是否总是(每个间隔)调用此func并执行每次启动线程所需的进程。如果我想的话,我该如何停止这个线程的运行呢?我不认为这会产生任何影响-很可能其中一个只是给另一个打电话。对detachNewThreadSelector或performSelectorInBackground的一次调用将导致仅调用一次指定的选择器。这是用于网络操作的,伙计!他要求为通用TAK创建线程。我知道这是为了网络操作。重读问题,OP问如何在后台上传。这是ASIHTTPRequest所做的。
- (IBAction)grabURLInBackground:(id)sender
{
   NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
   __block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
   [request setCompletionBlock:^{
      // Use when fetching text data
      NSString *responseString = [request responseString];

      // Use when fetching binary data
      NSData *responseData = [request responseData];
   }];
   [request setFailedBlock:^{
      NSError *error = [request error];
   }];
   [request startAsynchronous];
}