0708线程
多线程
pthread (了解,程序猿几乎不用)
// 创建线程
pthread_t pthread;
/*
// 执行线程参数
// thread_t *restrict:线程的地址
// const pthread_attr_t *restrict
// void *(*)(void *) 指向函数的指针
// void *restrict
pthread_create(pthread_t *restrict, const pthread_attr_t *restrict, void *(*)(void *), void *restrict);
*/
// 一般会这样写
// run:指向函数的指针,将需要执行的代码放入指向函数的指针中。
pthread_create(&thread, NULL, run, NULL);
-
例图
NSThread (掌握)
- NSThread 创建方式一
// 创建线程
NSThread *thread = [[NSThread allow] initWithTarget:self selector:@selector(run:) object:@"jack"];
// 线程名称
thread.name = @"myThread";
// 启动线程
[thread strat];
-
例图
NSThread 创建方式二
// 直接创建线程,调用run方法,参数为rose
[NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:@"rose"];
-
例图
创建方式三
// 直接创建线程,然后运行,调用run方法,参数为rose
[NSThread performSelectorInBackground:@selector(run:) withObject:@"jack"];
-
例图
线程的状态
使线程延时然后运行之后的程序
// 线程延时两秒运行之后程序
1.[NSThread sleepForTimeInterval:2];
2.[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:2]];
// 延时到遥远的未来
1.[NSThread sleepUntilDate:[NSDate distantFuture]];
// 直接退出线程
[NSThread exit];
// 获得当前线程
NSThread *current = [NSThread currentThread];
// 主线程相关用法
+ (NSThread *)mainThread; // 获得主线程
- (BOOL)isMainThread; // 是否为主线程
+ (BOOL)isMainThread; // 是否为主线程
// 获取1970年到现在走过的时间
CFTimeInterval end = CFAbsoluteTimeGetCurrent();
// 获取0时区当前的时间
NSDate *begin = [NSDate date];
-
例图
线程的安全
互斥锁使用格式
@synchronized(锁对象) { // 需要锁定的代码 }
注意:锁定1份代码只用1把锁,用多把锁是无效的互斥锁的使用前提:多条线程抢夺同一块资源
线程同步
线程同步的意思是:多条线程在同一条线上执行(按顺序地执行任务)
互斥锁,就是使用了线程同步技术当线程需要访问同一区域的变量时就要考虑线程数据的安全性,使用互斥锁来保证数据的安全性
这里详细说明太罗嗦,直接上代码
加载网络图片
- 加载方式二
// 添加图片网络路径
NSURL *url = [NSURL URLWithString:@"http://bgimg1.meimei22.com/list/2015-4-23/1/013.jpg"];
// 将文件路径下得图片包装成对象
NSData *date = [NSData dataWithContentsOfURL:url];
// 将对象转成imget图片
UIImage *image = [UIImaeg imageVithData:date];
// 再将图片给需要显示的iamgeView
imageView.image = imaeg;
-
例图
加载方式二
// 加载图片路径
NSURL *url = [NSURL URLWithString:@"http://bgimg1.meimei22.com/list/2015-4-23/1/013.jpg"];
// 将图片转成对象
NSData *date = [NSData dataWithContentsOfURL:url];
UIImage *image = [UIImage imageWithData:date];
// 进入主线程加载图片
[self.image performSelector:@selector(setImage:) onThread:[NSThread mainThread] withObject:image waitUntilDone:NO];
-
例图