NSOperation的继承实现

/*

 1.线程同步:原子操作,条件锁,递归锁,@synchronizedNSCondition:同步执行的顺序。

 2.线程间通信:

 在主线程做事:-performSelectorOnMainThread

 在子线程做事:-performSelectorInBackground

 在指定线程做事:-performSelector: onThread: withObject: waitUntilDone:

 在当前线程做事:-performSelector: withObject:

 取消发送给当前线程的某消息:+cancelPreviousPerformRequestsWithTarget: selector: object:

 */


对NSOperation继承实现,进行队列的操作。

官方实现:

NSBlockOperation

NSInvocationOperation

自定义实现:

.h

#import <Foundation/Foundation.h>
typedef void (^CompletedBlock) (NSDictionary *dictionary);
@interface MyOperation : NSOperation
@property (nonatomic, strong) NSURL *imageUrl;
@property (nonatomic, strong) id target;
@property (nonatomic, strong) CompletedBlock completedBlock;
- (instancetype)initWithUrl:(NSURL*)imageUrl target:(id)target completedBlock:(CompletedBlock)completedBlock;
@end
.m

#import "MyOperation.h"

@implementation MyOperation
- (void)main {
    NSData *data = [NSData dataWithContentsOfURL:self.imageUrl];
    NSDictionary *dict = @{@"data":data};
    self.completedBlock(dict);
}
- (instancetype)init{
    return nil;
   
}
- (instancetype)initWithUrl:(NSURL*)imageUrl target:(id)target completedBlock:(CompletedBlock)completedBlock{
    self = [super init];
    if (self) {
        _imageUrl = imageUrl;
        _target = target;
        _completedBlock = completedBlock;
    }
    return self;
}
@end
应用举例:

NSString *urlStr = @"http://b.hiphotos.baidu.com/image/pic/item/9e3df8dcd100baa1e477e5524310b912c9fc2efb.jpg";
    MyOperation *opera = [[MyOperation alloc]initWithUrl:[NSURL URLWithString:urlStr] target:self completedBlock:^(NSDictionary *dictionary) {
        UIImage *image = [UIImage imageWithData:dictionary[@"data"]];
        UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(80, 290, 80, 120)];
        imageView.image = image;
        [self.view addSubview:imageView];//回调根据你加的queue,会在不同的线程执行。
        NSThread *cu = [NSThread currentThread];
        cu.name = @"current";
        NSString *str = [NSThread mainThread].name;
        NSLog(@"%@= %@", str, cu);
    }];
//    NSOperationQueue *myq = [[NSOperationQueue alloc]init];
//    [myq addOperation:opera];//子线程执行completedBlock
    [[NSOperationQueue mainQueue] addOperation:opera];//主线程执行completedBlock

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值