Tag: nsthread

线程与asynchronous调用

我想知道产生一个线程或使用NSURLConnection类进行asynchronous调用之间的最佳。

在iOS上停止NSThread

我有函数调用循环,但我想调用它,如果我的视图出现,而不是视图消失时调用它。 循环function: -(void)updateArray { while (1) { NSLog(@"IN LOOP"); [NSThread sleepForTimeInterval:2.0]; if([FileSizeArray count] >0 || [FileCurrentSizeArray count] >0) { [FileSizeArray removeObjectsInRange:NSMakeRange(1, FileSizeArray.count-1)]; [FileCurrentSizeArray removeObjectsInRange:NSMakeRange(1, FileSizeArray.count-1)]; } [FileNameArray removeAllObjects]; [UserNameArray removeAllObjects]; … } 并在ViewWillAppear() timer= [NSTimer scheduledTimerWithTimeInterval: 2.0 target: self selector:@selector(updateArray:) userInfo: nil repeats:NO]; 而在DidDisAppear() [timer invalidate]; timer = nil; 但它不工作,它仍然打电话,我的应用程序崩溃。 谁能帮我? 提前致谢

一个开放的,但不活跃的,在主线程上调度的NSStream可以移动到不同的线程?

我正在使用(而且需要使用)我没有源代码的第三方框架。 第三方框架处理创build一个authentication的客户端/服务器连接,并交回一对开放的NSStreams。 我所面临的挑战是在主线程上安排NSStreams(创buildUI可能无响应的情况 – 我想避免这种情况)。 在stream从第三方框架中被移交的时候,没有networkingstream量正在进行。 所以,我想知道是否可以不计划和重新安排NSStreams。 有谁知道是否有可能取消调度一个开放的NSStream并重新安排在另一个线程上的另一个运行循环? 会造成问题吗? 那里有代码示例吗? 提前致谢! 亚伦

UIActivityIndi​​catorView不显示/开始animation

我有一个UIActivityIndi​​catorView的视图控制器和触发同步的button。 同步在一个单独的类中执行,通常在后台执行。 同步可以从我的应用程序的不同部分触发,我的视图控制器被通知同步事件。 现在,当我点击button时,UIActivityIndi​​catorView不会变得可见或不生动。 这是我在viewDiDLoad中的代码: self.syncNowActivityIndicatorView.hidesWhenStopped = YES; self.syncNowActivityIndicatorView.color = [MRStyleController getFirstLightColor]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(leechStarted) name:MRLeechStartedNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mergeStarted) name:MRMergeStartedNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(fileSyncStarted) name:MRFileSyncStartedNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(leechFailed) name:MRLeechFailedNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mergeFailed) name:MRMergeFailedNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(fileSyncFailed) name:MRFileSyncFailedNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(leechCompleted) name:MRLeechCompletedNotification object:nil]; [[NSNotificationCenter […]

初始化并用目标和select器启动NSThread

我有一个function块,作为参数: typedef void (^ MyCallBack)(int); -(void)doTask:(MyCallBack)callback{ … } 我需要使用NSThread在另一个线程中运行该函数: NSThread* myThread = [[NSThread alloc] initWithTarget:self selector:@selector(doTask:) object:nil]; //how to pass callback block here? [myThread start]; 但是我怎么能有上面的NSThread初始化函数传递的callback? 可能吗? (如果这是不可能的,那么实现这个目标的好方法是什么?)

如何在不立即执行select器的情况下创build不是主线程的NSThread

我想创build一个不是主线程的工作线程,所以我可以调用… [self performSelector:@selector(doStuff) OnThread:self.myWorkerThread withObject:nil]; …在我的代码中的一堆地点。 我如何创build一个线程..任何线程,并将其分配给一个variables,所以我可以在我的代码中反复使用它。 NSThread detachNewThreadWithSElector只会创build一个用于运行该select器的目的。 我需要创build一个线程,并以某种方式使用它。 我正在使用iOS,并需要在writerThread上执行所有的CoreData写操作。 我需要每次都使用相同的线程(不是主线程)。

如何通过NSOperation来实现并发任务?

我是NSoperation 。 NSoperation是一个单选对象。 我们怎样才能通过NSoperation操作同时实现多个操作? 是否有可能没有NSoperationQueue ? 即使我们使用NSoperationQueue,它也会执行操作FIFO格式。它将如何同时执行?

多个NSThreads同步

我想用NSThread来实现以下任务 我有一个主线程和三(3)workerThread T1,T2,T3。 所有这些从主线程同时开始,主线程有一个int sizevariables。 现在我想以一种方式同步所有三个线程,当我的每个线程都执行时,它将打印出下列内容: //在主线程中 – (void) mainFunction{ size = 0; NSThread* T1 = [[NSThread alloc] initWithTarget:self selector:@selector(workerThread:) object:@"T1"]; [T1 start]; NSThread* T2 = [[NSThread alloc] initWithTarget:self selector:@selector(workerThread:) object:@"T2"]; [T2 start]; NSThread* T3 = [[NSThread alloc] initWithTarget:self selector:@selector(workerThread:) object:@"T3"]; [T3 start]; } //工作线程 – (void) workerThread:(id)obj{ size++; NSLog(@"Thread:%@——–Size:%d,obj,size) } 我想要下面的输出: Thread:T1——-Size:1 Thread:T2——-Size:2 Thread:T3——-Size:3 […]

目标C中最好的multithreading方法?

我正在开发一个iPad应用程序,我目前正在努力寻找最佳的multithreading方法。 让我用一个简单的例子来说明这一点: 我有一个包含2个子视图的视图,一个目录select器和一个带有所选目录中所有图像缩略图的图库。 由于“下载”和生成这些缩略图可能需要相当长的一段时间我需要multithreading,因此视图的交互和更新不会被阻止。 这是我已经尝试过的: [self performSelectorInBackground:@selector(displayThumbnails 🙂 withObject:currentFolder]; 这工作正常,因为用户交互没有被阻止,但是当用户在第一个文件夹仍在加载的同时点击另一个文件夹时,它失败了。 两个线程正试图访问相同的视图和variables,导致彼此正确执行。 当用户点击另一个文件夹时,当前正在加载的文件夹的显示displayThumbnails应该被中止。 我没有find任何办法做到这一点.. NSThreads 我试过这个,但和第一种方法几乎一样的问题,我没有find一个(简单的)方法来取消正在进行的方法。 (是的,我知道[aThread cancel]但没有find一种方法来“恢复”线程)。 也许我应该NSThread并实现我自己的isRunning等方法? 但是没有更好的办法,或者我忽略了第三种(甚至是第四种和第五种)选项吗? 我认为这是一个相当简单的例子,我认为没有NSThread也许有更好的解决scheme。 那么,你会怎么做? 你的意见请!

Objective-C – 取消一个线程?

我有我的应用程序中的用户键入textField中的searchfunction,并且随着文本更改我正在search本地数据库并填充表中的数据。 根据input的文本,search可能需要1到10秒之间的时间,所以我决定使用一个线程。 每当文本改变,我想取消线程(如果已经运行),并用new关键字重新启动它。 问题是根据文档调用取消不保证线程将被杀死。 那么这里的解决scheme是什么? 有什么办法杀死一个线程? – (void)populateData { if (self.searchThread.isExecuting) { [self.searchThread cancel]; } [self.searchThread start]; } – (void)populateDataInBackground { @autoreleasepool { // get data from db // populate table on main thread } }