多线程基础知识

file:///Users/jerehedu/Desktop/屏幕快照%202015-06-02%2019.20.12.png

代码如下

#import "ViewController.h"

#import "UIImageView+ImageInit.h"

@interface ViewController ()

@property(nonatomic,strong)NSMutableArray * imageViewArray;

@property(nonatomic,strong)NSMutableDictionary * dic;

@property(nonatomic,strong)NSMutableArray * threadArray;

@property(nonatomic,assign)NSInteger count;

@end

@implementation ViewController

- (NSMutableArray *)imageViewArray{

if (_imageViewArray==nil) {

_imageViewArray=[NSMutableArray array];

}

return _imageViewArray;

}

- (NSMutableDictionary *)dic{

if (_dic==nil) {

_dic=[NSMutableDictionary dictionary];

}return _dic;

}

- (NSMutableArray *)threadArray{

if (_threadArray==nil) {

_threadArray=[NSMutableArray array];

}return _threadArray;

}

- (void)viewDidLoad {

[super viewDidLoad];

[self _loadView];

[self _openThread];

}

- (void)_loadView{

UIButton * bt=[UIButton buttonWithType:UIButtonTypeCustom];

bt.frame=CGRectMake(0, 20,20, 20);

bt.backgroundColor=[UIColor redColor];

[bt addTarget:self action:@selector(click) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:bt];

UIImageView * imageView=[[UIImageView alloc]init];

self.imageViewArray=[imageView getImage];

NSLog(@"%li",self.imageViewArray.count);

/*

//

//    for (int i=0; i<15; i++) {

//        int row=i/3;

//        int col=i%3;

//        UIImageView * imageView=[[UIImageView alloc]initWithFrame:CGRectMake(20+col*(45+80), row*(40+80)+40, 80, 80)];

//        imageView.backgroundColor=[UIColor redColor];

//        [self.view addSubview:imageView];

//        [self.imageViewArray addObject:imageView];

//

//    }

*/

}

- (void)_openThread{

for (int i=0; i<self.imageViewArray.count; i++) {

//用分类去封装

/*

// NSInteger num=[index integerValue];

//        NSString * path=[NSString stringWithFormat:@"http://images.cnblogs.com/cnblogs_com/kenshincui/613474/o_%i.jpg",i];

//       UIImageView * ima=[[UIImageView alloc]init];

//        [ima openThread:path];

*/

NSThread * thread=[[NSThread alloc]initWithTarget:self selector:@selector(loadImage:) object:@(i)];

[thread start];

[self.threadArray addObject:thread];

//[NSThread detachNewThreadSelector:@selector(loadImage:) toTarget:self withObject:@(i)];

}

}

- (void)loadImage:(NSNumber *)index{

//从网上加载图片

NSInteger num=[index integerValue];

NSString * path=[NSString stringWithFormat:@"http://images.cnblogs.com/cnblogs_com/kenshincui/613474/o_%li.jpg",num];

NSURL * url=[NSURL URLWithString:path];

NSData * data=[NSData dataWithContentsOfURL:url];

UIImage * image=[UIImage imageWithData:data];

if (image!=nil) {

[self.dic setObject:image forKey:@"image"];

[self.dic setValue:index forKey:@"index"];

}

MjimageModel * mj=[MjimageModel imageModelWithImageDic:self.dic];

/*

// NSThread * thread=[NSThread currentThread];

//

//    if ([thread isCancelled]) {

//

//        [NSThread exit];

//

//    }

*/

[self performSelectorOnMainThread:@selector(toTheScreen:) withObject:mj waitUntilDone:NO];

}

- (void)toTheScreen:(MjimageModel *)mj{

NSInteger i=mj.index;

UIImage * image=mj.image;

UIImageView * imageView=self.imageViewArray[i];

imageView.image=image;

[self.view addSubview:imageView];

}

说明加上如下的内容。可以实现点击按钮的时候暂停的作用

//buttton的点击事件

- (void)click{

//    for (NSThread * thread in self.threadArray) {

//        [thread cancel];

//

//    }

}

时间: 2024-10-19 08:35:29

多线程基础知识的相关文章

iOS开发多线程基础知识 NSOperation

-------NSOperation简介---- 1.NSOperation的作用 ·配合使用NSOperation和NSOperationQueue也能实现多线程编程 2.NSOperation和NSOperationQueue实现多线程的具体步骤 ·先将需要执行的操作封装到一个NSOperation对象中 ·然后将NSOperation对象添加到NSOperationQueue中 ·系统会自动将NSOperation中封装的操作放到一条新线程中执行 ---------NSOperation的

java多线程基础知识

1.ThrTest.java 继承Thread类方式 public class ThrTest extends Thread { private String name; public ThrTest() { } public ThrTest(String name) { this.name = name; } public void run() { for (int i = 0; i < 5; i++) { System.out.println(name + "运行 " + i

iOS开发多线程基础知识

--------------------------多线程概念基础------- 进程:正在运行的程序 内存:每个进程所占的存储空间 线程:1个进程要像执行任务,必须得有线程,线程是进程的基本执行单元, 线程的串行: ·1个线程中人物的执行是串行的 ·0同一个时间内,1个线程只能执行1个任务 0·线程是进程的一条执行路径 --------多线程 ·一个进程中可以开启多条线程,每条线程可以并行(同时)同时执行不同的任务 ·进程->车间 线程->车间工人 线程的并行: ·进程内多个线程同时执行,可

黑马程序员——java多线程基础知识1

多线程 进程是一个正在执行的程序. cpu在同时执行这些程序,其实是跳跃式的,做快速的切换,时间很短.一个进程可能存在多条路径.迅雷的多路径.每一个进行执行都有一个执行顺序,该顺序是一个执行路径,或这叫一个控制单元.每一个进程至少有一个线程,线程就是进程中的一个独立的控制单元,线程控制进程的执行.jvm启动的时候会有一个进程就叫做java,exe,该进程中至少有一个线程在控制Java程序的执行 ,而且该线程的执行代码在 主函数中.该线程称为主线程.虚拟机至少也有两个线程,一个主线程执行,另一个负

黑马程序员——Java多线程基础知识2

多线程协同 线程间的通讯:我们对资源的操作动作不同,比如说两个卡车一个拉煤一个装煤.但是他们共享了一个资源. 怎么样把这个资源拿出来?怎样把车装满?这个资源当然是一个类,他里面的组成元素就是对象!!现在我们就要有操作对象的思想了,我用对象把这车装满,现在一车装一个对象. 等待唤醒机制: 用的不是sleep是wait.flag标记,这是两人沟通的方式.其实每个标记就要做一次等待或者notify,判断wait,改值notify.线程池.notify唤醒里面的线程,按顺序唤醒.wait和notify必

Java基础知识强化之多线程笔记01:多线程基础知识(详见Android(java)笔记61~76)

1. 基础知识: Android(java)学习笔记61:多线程程序的引入    ~    Android(java)学习笔记76:多线程-定时器概述和使用 

C#中的多线程 - 基础知识

原文:http://www.albahari.com/threading/ 1简介及概念 C# 支持通过多线程并行执行代码,线程有其独立的执行路径,能够与其它线程同时执行. 一个 C# 客户端程序(Console 命令行.WPF 以及 Windows Forms)开始于一个单线程,这个线程(也称为“主线程”)是由 CLR 和操作系统自动创建的,并且也可以再创建其它线程.以下是一个简单的使用多线程的例子: 所有示例都假定已经引用了以下命名空间: using System; using System

C#中的多线程 - 基础知识 z

原文:http://www.albahari.com/threading/ 专题:C#中的多线程 1简介及概念Permalink C# 支持通过多线程并行执行代码,线程有其独立的执行路径,能够与其它线程同时执行. 一个 C# 客户端程序(Console 命令行.WPF 以及 Windows Forms)开始于一个单线程,这个线程(也称为“主线程”)是由 CLR 和操作系统自动创建的,并且也可以再创建其它线程.以下是一个简单的使用多线程的例子: 所有示例都假定已经引用了以下命名空间: using

多线程基础知识总结

0.并发和并行.进程核线程.多进程和多线程的区别: (这里的时间和时刻上的概念同物理上的一样) 并发:在一段时间内多个任务同时执行,或者说是在一段很短的时间内可以执行多条程序指令,微观上看起来好像是可以同时运行多个进程,单核处理器就可以做到. 并行:在同一时刻多个任务同时执行,或者说是在同一时刻可以执行多条程序指令,多核处理器才可以做到. 进程:进程是程序的一次执行过程,是系统运行程序的基本单位,打开 Windows 的任务管理器就可以看到很多进程. 线程:线程与进程相似,但线程是一个比进程更小