iOS多线程编程之NSThread的使用
2016-03-13 09:54
483 查看
NSThread 有两种直接创建方式:
- (id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument+ (void)detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument
第一个是实例方法,第二个是类方法,使用方法如下:
[NSThread detachNewThreadSelector:@selector(doSomething:) toTarget:self withObject:nil];
NSThread* myThread = [[NSThread alloc] initWithTarget:self selector:@selector(doSomething:) object:nil];
[myThread start];
其中类方法是自启动的(直接创建并运行),实例方法是先创建线程,再进行线程操作。
各参数的含义:
selector :线程执行的方法,这个selector只能有一个参数,而且不能有返回值。
target :selector消息发送的对象
argument:传输给target的唯一参数,也可以是nil
下载图片的实例:
新建singeView app
首先在mian.stroyboard界面上拖一个imgView控件和一个button按钮, 按住control键拖到viewController.h文件中创建IBOutlet UIImageView *iv; - (IBAction)showImage:(id)sender;属性和方法;
ViewController.m中实现:
#import "ViewController.h"
@implementation ViewController
- (void)viewDidLoad
{
[super
viewDidLoad];
}
- (IBAction)showImage:(id)sender
{
NSString* url =
@
@"https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png";
// 创建新线程对象
NSThread *thread = [[NSThread
alloc]initWithTarget:self
selector:@selector(downloadImageFromURL:)
object:url];
// 启动线程
[thread start];
}
// 定义一个方法作为线程执行体。
-(void)downloadImageFromURL:(NSString *) url
{
// 从网络获取数据
NSData *data = [[NSData
alloc]
initWithContentsOfURL:[NSURL
URLWithString:url]];
// 将网络数据初始化为UIImage对象
UIImage *image = [[UIImage
alloc]initWithData:data];
if(image !=
nil)
{
//
在主线程中执行updateUI:方法
[self
performSelectorOnMainThread:@selector(updateUI:)
withObject:image
waitUntilDone:YES];
}
else
{
NSLog(@"---下载图片出现错误---");
}
}
-(void)updateUI:(UIImage*) image
{
self.iv.image = image;
}
@end
效果如下:
当加载地址是使用http通信时,会产生如下错误:
Xcode 7中http通信出现如下错误:Application Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.
原因及解决方法:http://www.jianshu.com/p/c663a1f274fa
相关文章推荐
- iOS开发-进阶:利用通知(NSNotification)进行数据传递
- iOS开发-进阶:NSNotificationCenter 使用姿势详解
- iOS开发-基础: NSDate 以秒数加减
- iOS证书自助管理实现思路
- AudioManger和AudioSystem的关系
- AudioService 和AudioManager 以及使用举例.
- CoreImage 之 CIDetector iOS 人脸识别
- iOS音频播放器锁屏歌词显示与性能优化
- 多线程
- XZ_iOS之实现离线缓存
- iOS多线程的初步研究(三)-- NSRunLoop
- iOS的三种多线程技术
- iOS开发中常用的几种设计模式
- 第一个iOS程序简单计算器设计-用到View,get点语法
- iOS 多线程 NSthread的简单使用——iOS 编码复习(六)(多线程4)
- IOS调试—断点调试
- iOS开发两个距离较近的按钮同时触发事件的解决方法
- iOS之04-方法的声明和实现
- ios 图片的两种加载方式
- iOS之03-类的合理设计