您的位置:首页 > 移动开发 > IOS开发

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: