NSOperationQueue 以及 NSOperation 在 iOS 5 下的问题
来源:互联网 发布:泸州网络问政平台app 编辑:程序博客网 时间:2024/05/21 17:35
近期将xcode升级到了4.2,SDK是 iOS5。在 iOS 5 下,以前可以正常工作的 NSOperation,会崩溃。崩溃的原因是:取消队列中的操作,但是该操作还没有开始。
解决这个问题的方法是:
在 start 方法中判断操作是否已经取消,如果取消,结束操作,没有取消,再执行操作。
在 cancel 方法中判断操作是否正在执行,如果在执行,结束操作,如果没有,修改操作的isCancelled状态。
头文件:
#import <Foundation/Foundation.h>@interface FMURLRequest : NSOperation { BOOL _isReady; BOOL _isCancelled; BOOL _isExecuting; BOOL _isFinished;}- (void)cancel;@end
实现文件:
#import "FMURLRequest.h"@interface FMURLRequest ()- (BOOL)isReady;- (BOOL)isExecuting;- (BOOL)isFinished;- (BOOL)isCancelled;- (BOOL)isConcurrent;- (void)start;- (void)finish;@end@implementation FMURLRequest- (id)init { if ((self = [super init])) { _isCancelled = NO; _isExecuting = NO; _isFinished = NO; _isReady = YES; } return self;}- (void)dealloc { [super dealloc];}#pragma -#pragma mark Operation Management & Super Class Methods- (BOOL)isReady { return _isReady;}- (BOOL)isExecuting { return _isExecuting;}- (BOOL)isFinished { return _isFinished;}- (BOOL)isCancelled { return _isCancelled;}- (BOOL)isConcurrent { return YES;}- (void)start {if (![NSThread isMainThread]) { [self performSelectorOnMainThread:@selector(start) withObject:nil waitUntilDone:NO]; return; } [self willChangeValueForKey:@"isExecuting"]; _isExecuting = YES; [self didChangeValueForKey:@"isExecuting"];if ([self isCancelled]) {[self finish];return;} // TODO: start operation}- (void)finish { [self willChangeValueForKey:@"isExecuting"]; [self willChangeValueForKey:@"isFinished"]; _isExecuting = NO; _isFinished = YES; [self didChangeValueForKey:@"isExecuting"]; [self didChangeValueForKey:@"isFinished"];}- (void)cancel { [self willChangeValueForKey:@"isCancelled"]; _isCancelled = YES; [self didChangeValueForKey:@"isCancelled"]; if ([self isExecuting] == YES) { // TODO: clean resource [self finish]; }}@end
- NSOperationQueue 以及 NSOperation 在 iOS 5 下的问题
- iOS 多线程下NSOperation、NSBlockOperation、NSInvocationOperation、NSOperationQueue的使用
- 使用NSOperation以及NSOperationQueue
- 使用NSOperation以及NSOperationQueue
- 使用NSOperation以及NSOperationQueue
- 使用NSOperation以及NSOperationQueue
- iOS多线程 NSOperation和NSOperationQueue的使用
- iOS开发-NSOperation和NSOperationQueue的使用
- iOS 之 NSOperation,NSOperationQueue
- NSOperationQueue 的NSOperation 数
- NSOperation和NSOperationQueue在iOS多线程编程中的使用
- [iOS]NSOperationQueue、NSOperation、NSInvocationOperation相关
- iOS多线程之NSOperation/NSOperationQueue
- iOS多线程编程之NSOperation和NSOperationQueue的使用
- IOS多线程编程之NSOperation和NSOperationQueue的使用
- iOS多线程编程之NSOperation和NSOperationQueue的使用
- iOS多线程编程之NSOperation和NSOperationQueue的使用
- iOS多线程编程之NSOperation和NSOperationQueue的使用
- Canvas、path、paint讲解
- 超链接调用js方法
- Android ListView异步加载图片
- android 对于apk签名汇总
- 肾有多好,人就有多年轻。男女通用
- NSOperationQueue 以及 NSOperation 在 iOS 5 下的问题
- Sicily 1003. Hit or Miss
- 使用UITableView实现树视图
- C++程序设计实验报告(十一)
- linux 中解析命令行参数 (getopt_long用法)【转自:ast_224】
- MySQL性能优化的最佳21条经验
- C++程序设计实验报告(十二)
- read bigfile
- 2012活着真好