标签: nsoperationqueue

OperationQueue.main vs DispatchQueue.main

当你需要在网络任务或操作的完成块中的主线程上执行某些操作时,哪种方式获取它将是最合适的,为什么?:

  • OperationQueue.main.addOperation
  • DispatchQueue.main.async

ui-thread nsoperationqueue grand-central-dispatch ios swift

23
推荐指数
3
解决办法
1万
查看次数

NSFetchedResultsController不显示来自不同上下文的更新

我有一个NSFetchedResultsController和几个操作更新托管对象在不同的​​线程上通过NSOperationQueue.

FRC(带有谓词)看起来像这样:

- (NSFetchedResultsController*)fetchedResultsController
{
    if(fetchedResultsController) return fetchedResultsController;

    NSManagedObjectContext* mainContext = [self managedObjectContext];

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    [fetchRequest setEntity:[NSEntityDescription entityForName:@"Check" inManagedObjectContext:mainContext]];
    [fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"isSync == %@", [NSNumber numberWithBool:NO]]];
    [fetchRequest setFetchBatchSize:10];

    fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:mainContext sectionNameKeyPath:nil cacheName:nil];
    fetchedResultsController.delegate = self;

    [fetchRequest release], fetchRequest = nil;

    return fetchedResultsController;
}
Run Code Online (Sandbox Code Playgroud)

主线程和线程操作具有自己的托管对象上下文.他们只共享同一个协调员.

在线程操作中,我将isSync属性从更改NOYES.要知道Check要更新的实体是什么,主要上下文将传递给线程化的a NSManagedObjectID.线程操作检索托管对象,如下所示:

-(void)main
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    NSManagedObjectContext *exportContext = [[NSManagedObjectContext alloc] …
Run Code Online (Sandbox Code Playgroud)

core-data nsfetchedresultscontroller nsoperationqueue nsmanagedobjectcontext ios

22
推荐指数
1
解决办法
9671
查看次数

哪个是GCD,NSThread或NSOperationQueue中最好的?

什么是iOS中多线程的最佳方式,因为我们有三个选项GCD NSThread,和NSOperationQueue?我很困惑哪一个是最好的?如果没有,那么哪个应该用于什么情况以及它们如何不同,如果有人有一些很好的使用示例NSOperationQueue,请分享以便我可以学习.

multithreading nsthread nsoperationqueue grand-central-dispatch ios

22
推荐指数
1
解决办法
2万
查看次数

学习NSBlockOperation

我是块的忠实粉丝,但没有将它们用于并发.经过一些谷歌搜索,我拼凑了这个想法,以隐藏我在一个地方学到的一切.目标是在后台执行一个块,当它完成时,执行另一个块(如UIView动画)......

- (NSOperation *)executeBlock:(void (^)(void))block completion:(void (^)(BOOL finished))completion {

    NSOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:block];

    NSOperation *completionOperation = [NSBlockOperation blockOperationWithBlock:^{
        completion(blockOperation.isFinished);
    }];

    [completionOperation addDependency:blockOperation];
    [[NSOperationQueue mainQueue] addOperation:completionOperation];    

    NSOperationQueue *backgroundOperationQueue = [[NSOperationQueue alloc] init];
    [backgroundOperationQueue addOperation:blockOperation];

    return blockOperation;
}

- (void)testIt {

    NSMutableString *string = [NSMutableString stringWithString:@"tea"];
    NSString *otherString = @"for";

    NSOperation *operation = [self executeBlock:^{
        NSString *yetAnother = @"two";
        [string appendFormat:@" %@ %@", otherString, yetAnother];
    } completion:^(BOOL finished) {
        // this logs "tea for two"
        NSLog(@"%@", string);
    }];

    NSLog(@"keep this operation …
Run Code Online (Sandbox Code Playgroud)

objective-c nsoperation nsoperationqueue ios nsblockoperation

19
推荐指数
2
解决办法
2万
查看次数

如何制作NSOperationQueue系列?

我打算使NSOperationQueue串行而不是并发.

我知道的一种方法是:

NSOperationQueue *globalQueue;
globalQueue.maxConcurrentOperationCount =1;
Run Code Online (Sandbox Code Playgroud)

还有其他方法吗?

objective-c nsoperationqueue ios

19
推荐指数
1
解决办法
1万
查看次数

如何取消使用addOperationWithBlock创建的操作?

我正在使用NSOperationQueue的addOperationWithBlock.从块内,我如何检查是否应该取消操作?或访问任何NSOperation属性/方法?

[myOperationQueue addOperationWithBlock: ^{

  while ( /* long running loop */ )
  {
      // how to determine here if I need to cancel?
      // for that matter, access any NSOperation properties/methods?

  }

}];
Run Code Online (Sandbox Code Playgroud)

使用NSBlockOperation是更好的方法吗?

iphone nsoperation nsoperationqueue ios

18
推荐指数
1
解决办法
6876
查看次数

NSOperation等待异步块执行

我需要将异步操作放入操作队列,但是,它们需要在另一个之后执行

self.operationQueue = [NSOperationQueue new];
self.operationQueue.maxConcurrentOperationCount = 1;

[self.operationQueue addOperationWithBlock:^{

    // this is asynchronous
    [peripheral1 connectWithCompletion:^(NSError *error) {

    }];

}];

[self.operationQueue addOperationWithBlock:^{

    // this is asynchronous
    [peripheral2 connectWithCompletion:^(NSError *error) {

    }];

}];
Run Code Online (Sandbox Code Playgroud)

问题是,由于peripheralN connectWithCompletion是异步的,队列中的操作结束而下一个执行,我需要模拟,peripheralN connectWithCompletion是同步的并等待操作结束,直到异步块执行

所以我需要这样的行为,只使用操作队列

    [peripheral1 connectWithCompletion:^(NSError *error) {

            [peripheral2 connectWithCompletion:^(NSError *error) {

            }];

    }];
Run Code Online (Sandbox Code Playgroud)

cocoa asynchronous nsoperation nsoperationqueue

17
推荐指数
2
解决办法
4736
查看次数

如何在NSOperationQueue中暂停NSOperation?

我需要暂停一个插入NSOperationQueue的正在运行的NSOperation.目前我取消所有操作并重新启动它们.但这会导致在完成流程方面出现某种重复.我尝试使用NSOperationQueue的setSuspended标志.但它并没有暂停这项行动.有什么出路吗?

macos cocoa nsoperation nsoperationqueue ios

16
推荐指数
1
解决办法
1万
查看次数

在NSOperationQueue中的dispatch_after等价物

我正在将我的代码从常规GCD移动到NSOperationQueue因为我需要一些功能.我的很多代码都依赖于dispatch_after才能正常工作.有没有办法做类似的事情NSOperation

这是我需要转换为的一些代码NSOperation.如果您可以提供使用此代码转换它的示例,那就太棒了.

dispatch_queue_t queue = dispatch_queue_create("com.cue.MainFade", NULL);
dispatch_time_t mainPopTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(timeRun * NSEC_PER_SEC));
dispatch_after(mainPopTime, queue, ^(void){
    if(dFade !=nil){
        double incriment = ([dFade volume] / [self fadeOut])/10; //incriment per .1 seconds.
        [self doDelayFadeOut:incriment with:dFade on:dispatch_queue_create("com.cue.MainFade", 0)];
    }

});
Run Code Online (Sandbox Code Playgroud)

xcode objective-c nsoperationqueue grand-central-dispatch ios

16
推荐指数
1
解决办法
1万
查看次数

NSOperationQueue串行FIFO队列

是否可以通过将NSoperationQueue对象设置maxConcurrentOperationCount为1 来将对象用作串行FIFO队列?

我注意到文档声明......

对于最大并发操作数设置为1的队列,这相当于一个串行队列.但是,您永远不应该依赖于操作对象的串行执行.

这是否意味着无法保证FIFO执行?

objective-c fifo nsoperationqueue ios serial-processing

15
推荐指数
2
解决办法
1万
查看次数