IOS中的线程操作(1)

IOS 上提供的多线程方法只要分为三种,1、NSThread 2、NSOperation 3、GCD ([self performSelectorInBackground:SEL withObject:id] 这个方法本质上也是一种多线程的方式),三种方式抽象程度越来越高,代码的编写难度也越来越简单。

1、NSThread:

NSThread比其他两个都要更轻量级,但需要自己来管理线程的生命周期和同步,代码的编写上比其他两个复杂。

NSThread提供了两种初始化方式,一种是传统的init方法

NSThread *thread = [[NSThread alloc] initWithTarget:(id) selector:(SEL) object:(id)]
     [thread start];

在init的时候,虽然已经为该线程分配了内存,不过该线程并不会立刻执行,使用这种方法去初始化优点显而易见,我们可以得到一个NSThread对象,可以方便的进行对该线程的管理。

而另外一种方法

  [NSThread detachNewThreadSelector:(SEL) toTarget:(id) withObject:(id)]

使用这种方式开启线程,这个线程会立刻执行

看下面的代码,大家都知道访问网络是一个耗时的操作,在项目中我们需要展现从网络中获取的图片的时候我们就可以使用线程操作

#import "ViewController.h"

#define IMAGE_PATH @"https://www.baidu.com/img/bdlogo.png"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *mImage;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    NSThread *mThread = [[NSThread alloc] initWithTarget:self selector:@selector(DownImage:) object:IMAGE_PATH];
    [mThread start];
}

- (void)DownImage:(NSString *)imagePath{
    NSData *imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:imagePath]];
    UIImage *image = [[UIImage alloc] initWithData:imageData];
    [self performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:YES];
}

- (void)setImage:(UIImage *)image{
    [self.mImage setImage:image];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
时间: 2024-08-30 07:03:23

IOS中的线程操作(1)的相关文章

IOS中的线程操作(2)

接上一篇 2.NSOperation NSOperation是一个抽象类,本身并没有办法去直接使用,如果我们要使用它,就要去使用它的子类.IOS已经给我们提供了两个已经实现好的子类,NSInvocationOperation和NSBlockOperation. 对于这两个子类虽然IOS本身提供了start方法,不过我们一般不去直接使用它而需要借助另外一个类 NSOperationQueue . NSOperationQueue顾名思义是一个操作队列,他会给我们提供一个有序的执行队列,看一下苹果官

IOS中的线程操作(3)

使用CGD比前面两种更高效(据说是这样,有兴趣的同学可以去试试).这也是苹果比较推荐使用的方式. GCD是Grand Central Dispatch的缩写,是一组用于实现并发编程的C接口.GCD是基于Objective-C的Block的特性开发的,基本的业务逻辑和NSOperation很像.都是添加一个任务到一个队列,由系统来负责线程的生成和调度.因为直接使用Block,所以使用起来很是方便,降低了多线程开发的门槛. 还是前两节下载图片的例子,让我们看一下使用GCD模式该怎样做. #impor

Java与iOS中的线程安全与线程同步

Java 中的线程安全与线程同步: 创建一个 Thread的实现类 MyThread , 作为线程体; 创建 Test 类, 在主函数中生成两个 Thread 对象, 两个对象公用一个线程体( MyThread 的对象 ); 线程安全: 避免多个线程同时访问统一资源; 解决办法: 加同步锁;  synchronized(this) { 要访问的资源; } iOS 中的线程安全与线程同步 线程安全: 同一资源在统一时间只能允许一个线程进行访问 解决办法: 方法一: 加同步锁 @synchroniz

Python程序中的线程操作-锁

Python程序中的线程操作-锁 一.同步锁 1.1多个线程抢占资源的情况 from threading import Thread import os,time def work(): global n temp=n time.sleep(0.1) n=temp-1 if __name__ == '__main__': n=100 l=[] for i in range(100): p=Thread(target=work) l.append(p) p.start() for p in l:

Python程序中的线程操作-concurrent模块

Python程序中的线程操作-concurrent模块 一.Python标准模块--concurrent.futures 官方文档:https://docs.python.org/dev/library/concurrent.futures.html 二.介绍 concurrent.futures模块提供了高度封装的异步调用接口 ThreadPoolExecutor:线程池,提供异步调用 ProcessPoolExecutor:进程池,提供异步调用 两者都实现相同的接口,该接口由抽象Execut

Python程序中的线程操作(线程池)-concurrent模块

目录 Python程序中的线程操作(线程池)-concurrent模块 一.Python标准模块--concurrent.futures 二.介绍 三.基本方法 四.ProcessPoolExecutor 五.ThreadPoolExecutor 六.map的用法 七.回调函数 Python程序中的线程操作(线程池)-concurrent模块 一.Python标准模块--concurrent.futures 官方文档:https://docs.python.org/dev/library/con

iOS 中SQLite数据库操作

在iOS中实现SQLite数据库的操作:1.导入框架(libsqlite3.0.tbd) 2.导入头文件<sqlite3.h> 3.实现数据的增删改查 实现简单 SQLite数据库操作 的 demo 具体过程: 1.创建名为 SQLite_Manage 的.h .m 文件,导入头文件 <sqlite3.h> 2.数据库在一个app中只有一个,使用单例模式:(代码如下) 1 + (SQLite_Manager *)sharedManager{ 2 static SQLite_Mana

iOS中保证线程安全的几种方式与性能对比

来源:景铭巴巴 链接:http://www.jianshu.com/p/938d68ed832c 一.前言 前段时间看了几个开源项目,发现他们保持线程同步的方式各不相同,有@synchronized.NSLock.dispatch_semaphore.NSCondition.pthread_mutex.OSSpinLock.后来网上查了一下,发现他们的实现机制各不相同,性能也各不一样.不好意思,我们平常使用最多的@synchronized是性能最差的.下面我们先分别介绍每个加锁方式的使用,在使用

118 python程序中的线程操作-创建多线程

一.python线程的模块 1.1 thread和threading模块 thread模块提供了基本的线程和锁的支持 threading提供了更高级别.功能更强的线程管理的功能. 1.2 Queue模块 Queue模块允许用户创建一个可以用于多个线程之间共享数据的队列数据结构. 1.3注意模块的选择 避免使用thread模块 因为更高级别的threading模块更为先进,对线程的支持更为完善 而且使用thread模块里的属性有可能会与threading出现冲突: 其次低级别的thread模块的同