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);
-
例图
QQ20150721-2@2x.png
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];
-
例图
网友评论