相关疑难解决方法(0)

将NSOperation子类化为并发和可取消

我无法找到关于如何子类化为NSOperation并发以及支持取消的良好文档.我阅读了Apple文档,但我无法找到"官方"示例.

这是我的源代码:

@synthesize isExecuting = _isExecuting;
@synthesize isFinished = _isFinished;
@synthesize isCancelled = _isCancelled;

- (BOOL)isConcurrent
{
    return YES;
}

- (void)start
{
/* WHY SHOULD I PUT THIS ?
    if (![NSThread isMainThread])
    {
        [self performSelectorOnMainThread:@selector(start) withObject:nil waitUntilDone:NO];
        return;
    }
*/

    [self willChangeValueForKey:@"isExecuting"];
    _isExecuting = YES;
    [self didChangeValueForKey:@"isExecuting"];


    if (_isCancelled == YES)
    {
        NSLog(@"** OPERATION CANCELED **");
    }
    else
    {
        NSLog(@"Operation started.");
        sleep(1);
        [self finish];
    }
}

- (void)finish
{
    NSLog(@"operationfinished.");

    [self willChangeValueForKey:@"isExecuting"];
    [self willChangeValueForKey:@"isFinished"];

    _isExecuting = NO; …
Run Code Online (Sandbox Code Playgroud)

iphone nsoperation nsoperationqueue performselector

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

如何取消NSBlockOperation

我有一个长时间运行的循环,我想在后台运行一个NSOperation.我想用一个块:

NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
   while(/* not canceled*/){
      //do something...
   }
}];
Run Code Online (Sandbox Code Playgroud)

问题是,如何检查它是否被取消.该块不带任何参数,并且operation在块被捕获时为零.有没有办法取消块操作?

nsoperation nsoperationqueue objective-c-blocks

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

带有ALAsset Block的NSBlockOperation或NSOperation使用ALAsset URL显示照片库图像

我问这个问题关于我的问题以有效的方式显示photolibrary图像iPhone高效的UITableView"cellForRowIndexPath"方法来绑定PhotoLibrary图像.

所以我想请求答案不重复到这个没有阅读以下细节:)

我们来讨论这个问题,

我已经详细研究了上面提到的问题,我从这里找到了关于操作队列的文档.

所以我创建了一个示例应用程序,通过ALAsset块使用操作队列显示七个照片库图像.

以下是示例应用程序详细信息.

步骤1:

在NSOperationalQueueViewController viewDidLoad方法中,我已将所有照片库ALAsset URL检索到名为的数组中urlArray.

第2步:

将所有URL添加到之后urlArray, if(group!= nil)条件将为false assetGroupEnumerator,因此我创建了一个NSOperationQueue,然后通过for循环创建了七个UIImageView 并NSOperation使用相应的图像视图URL创建了我的子类对象为每一个并将它们添加NSOperationQueue.

在这里查看我的NSOperation子类.

在这里查看我的实现(VierwController)类.

我们来讨论这个问题吧.

它不会始终显示所有七个图像.一些图像丢失了.丢失的顺序多次改变(一次不显示第六和第七次,另一次不显示第二次和第三次).控制台日志显示无法找到照片图片编号.但是,URL已正确记录.

您可以在此处查看日志详细信息.

我班上有错吗?

另外,当我浏览上面提到的操作队列文档时,我已经阅读过了NSBlockOperation.我是否需要实现NSBlockOperation而不是NSOperation在处理ALAsset块时?

NSBlockOperation说明称

您原样使用的类是同时执行一个或多个块对象.因为它可以执行多个块,所以块操作对象使用组语义进行操作; 只有当所有关联的块都已完成执行时,操作本身才被认为已完成.

如何NSBlockOperation针对我的示例应用程序实现with ALAsset块?

我已经完成了Stack …

iphone nsoperation nsoperationqueue nsblockoperation alassetslibrary

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