猫猫学iOS(五十三)多线程网络之NSOperation简介

猫猫分享,必须精品

原创文章,欢迎转载。转载请注明:翟乃玉的博客

地址:http://blog.csdn.net/u013357243?viewmode=contents

一:简单介绍

1:NSOperation的作?使用步骤:

配合使用NSOperation和NSOperationQueue也能实现多线程编程。

NSOperation和NSOperationQueue实现多线程的具体步骤:

(1)先将需要执行的操作封装到一个NSOperation对象中(子类实例)。

NSOperationQueue的作用:
NSOperation可以调用start方法来执行任务,但默认是同步执行的如果将NSOperation添加到NSOperationQueue(操作队列)中,系统会自动异步执行NSOperation中的操作。

(2)然后将NSOperation对象添加到NSOperationQueue中。

//这里是两个子类的方法后面详细介绍
- (void)addOperation:(NSOperation *)op;
- (void)addOperationWithBlock:(void (^)(void))block;

(3)系统会?动将NSOperationQueue中的NSOperation取出来。

(4)将取出的NSOperation封装的操作放到?条新线程中执?。

2.NSOperation的子类

NSOperation是个抽象类,并不具备封装操作的能力,必须使?它的子类

使用NSOperation?类的方式有3种:

(1)NSInvocationOperation

(2)NSBlockOperation

(3)自定义子类继承NSOperation,实现内部相应的?法

NSOperation的三种用法(子类)

1:NSInvocationOperation

最简单的用法(在主线程中:)

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{

    // 1.创建1个操作
    NSInvocationOperation *operation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(download) object:nil];

    // 2.开启操作
    [operation start];
}

-(void)download
{
    NSLog(@"download---%@", [NSThread currentThread]);
}

异步的方法(记住这个)

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    // 1.创建一个队列(非主队列)
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];

    // 2.创建1个操作
    NSInvocationOperation *operation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(download) object:nil];

    // 3 .将操作添加到队列(非主队列)————这一步内部相当于开启
    [queue addOperation:operation];

}

-(void)download
{
    NSLog(@"download---%@", [NSThread currentThread]);
}

效果:线程3(其中系统会自动给我们分配最合适的线程)

注意:操作对象默认在主线程中执行(前一个),只有添加到队列中才会开启新的线程。即默认情况下,如果操作没有放到队列中queue中,都是同步执行。只有将NSOperation放到一个NSOperationQueue中,才会异步执行操作


2:NSBlockOperation

第二种也很简单:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    // 1.创建一个队列(非主队列)
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];

    // 2.创建1个操作
    NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"download---%@", [NSThread currentThread]);
    }];

    // 3 .将操作添加到队列(非主队列)————这一步内部相当于开启
    [queue addOperation:operation];

}

效果:

这里还有中写法是直接将block添加到queue中

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    // 1.创建一个队列(非主队列)
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];

    // 2.将操作添加到队列(非主队列)————这一步内部相当于开启
    [queue addOperationWithBlock:^{
        NSLog(@"download---%@", [NSThread currentThread]);
    }];

}

3:自定义子类继承NSOperation,实现内部相应的?法

这个也不难,就是自定义一个NSOperation的子类,实现他的main方法

自定义类的写法

//
//  NYOperation.m
//  NSOperation使用
//
//  Created by apple on 15-5-27.
//  Copyright (c) 2015年 znycat. All rights reserved.
//

#import "NYOperation.h"

@implementation NYOperation

-(void)main
{
    NSLog(@"download---%@", [NSThread currentThread]);
}

@end

controller调用写法

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    // 1.创建一个队列(非主队列)
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];

    // 2.创建1个操作
    NYOperation *operation = [[NYOperation alloc]init];

    // 3 .将操作添加到队列(非主队列)————这一步内部相当于开启
    [queue addOperation:operation];

}

结果:


时间: 2024-10-03 13:27:50

猫猫学iOS(五十三)多线程网络之NSOperation简介的相关文章

猫猫学IOS(十三)UI之UITableView学习(下)汽车名牌带右侧索引

猫猫分享,必须精品 素材代码地址:http://blog.csdn.net/u013357243/article/details/44727225 原文地址:http://blog.csdn.net/u013357243?viewmode=contents 先看效果图 代码 ViewController //ps:新建iOS交流学习群:304570962 可以加猫猫QQ:1764541256 或则微信znycat 让我们一起努力学习吧. 原文:http://blog.csdn.net/u0133

(素材源码)猫猫学IOS(十三)UI之UITableView学习(下)汽车名牌带右侧索引

猫猫分享,必须精品 素材代码地址:http://download.csdn.net/detail/u013357243/8544217 原文地址:http://blog.csdn.net/u013357243?viewmode=contents 先看效果图 ps:新建iOS交流学习群:304570962 可以加猫猫QQ:1764541256 或则微信znycat 让我们一起努力学习吧. 原文:http://blog.csdn.net/u013357243?viewmode=contents

(素材_源码) 猫猫学IOS(五)UI之360等下载管理器九宫格UI

猫猫分享,必须精品 先看效果 代码学习地址: 猫猫学IOS(五)UI之360等下载管理器九宫格UI 猫猫学IOS(五)UI之360等下载管理器九宫格UI http://blog.csdn.net/u013357243/article/details/44486609 下载地址:http://download.csdn.net/detail/u013357243/8516817 ps1:有想要源码的可以加猫猫微信znycat QQ也可以:1764541256 --视频学习资料素材免费分析,哎自己一

猫猫学IOS(四)UI之半小时搞定Tom猫

话不多说 先上效果 项目源码素材下载地址: Tom猫游戏代码iOS 素材http://blog.csdn.net/u013357243/article/details/44457357 效果图 曾经风靡一时的tom猫其实制作起来那是叫一个相当的easy啊 功能全部实现,(关键是素材,没有素材的可以加我微信) 新手也可以很快的完成tom这个很拉轰的ios应用哦 做过android的我表示,android党默哀下把,那个做起来真心痛苦.... 然后呢你需要准备这些素材... 拖拽控件吧,因为这一个项

猫猫学iOS 之微博项目实战(2)微博主框架-自己定义导航控制器NavigationController

猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243?viewmode=contents 一:加入导航控制器 上一篇博客完毕了对底部的TabBar的设置,这一章我们完毕自己定义导航控制器(NYNavigationController). 为啥要做自己定义呢.由于为了更好地封装代码,而且系统的UINavigationController不能满足我们的需求了,所以得自己定义. 首先,我们在NYTabBarViewCon

猫猫学iOS 之微博项目实战(2)微博主框架-自定义导航控制器NavigationController

猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243?viewmode=contents 一:添加导航控制器 上一篇博客完成了对底部的TabBar的设置,这一章我们完成自定义导航控制器(NYNavigationController). 为啥要做自定义呢,因为为了更好地封装代码,并且系统的UINavigationController不能满足我们的需求了,所以得自定义. 首先,我们在NYTabBarViewContro

猫猫学iOS之最近的反思

其实很早以前就想写点了,虽然猫猫现在还是学生,但是就自学方面,猫猫觉得自己水平还可以--注意,我不是大神,我只是一名小小的菜猫... 首先简单说一下自己吧,本人猫猫,真名看博客名字,目前大四,自学编程两年半多了,学习路线: 易语言 –> 啊哈 –> java –> javaWeb(jstl,html,js,css-..) –> android –> c –> objective-c –> iOS.作为一名体育生表示不务正业的学了这么多程序猿的东东...不多说了 言

猫猫学iOS(五十五)多线程网络之图片下载框架之SDWebImage

猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243?viewmode=contents 效果: 代码: - (NSArray *)apps { if (!_apps) { NSArray *dictArray = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"apps.plist" ofType:nil

猫猫学iOS(五十)多线程网络之GCD简单介绍(任务,队列)

猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243?viewmode=contents GCD简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为"牛逼的中枢调度器" 纯C语言,提供了非常多强大的函数 2.GCD的优势 GCD是苹果公司为多核的并行运算提出的解决方案 GCD会自动利用更多的CPU内核(比如双核.四核) GCD会自动管理线程的生命周期(创建线程.调度任务