我无法找到关于如何子类化为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) 我有一个长时间运行的循环,我想在后台运行一个NSOperation
.我想用一个块:
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
while(/* not canceled*/){
//do something...
}
}];
Run Code Online (Sandbox Code Playgroud)
问题是,如何检查它是否被取消.该块不带任何参数,并且operation
在块被捕获时为零.有没有办法取消块操作?
我问这个问题关于我的问题以有效的方式显示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