您的位置:首页 > 其它

iPhone开发之多线程使用

2012-05-13 14:46 316 查看
创建线程有三种方法:

一、通过[NSThread detachNewThreadSelector:@selector(addAction) toTarget:self withObject:nil]创建,无具体的返回对象,线程不受用户控制,控制权掌握在系统的手中;

二、通过[[NSThread alloc] initWithTarget:self selector:@selector(addNumberTo:) object:maxNumber]创建,通过该方式创建的线程由用户自己管理;

三、自定义线程,通过继承NSThread来实现。

//
//  ViewController.m
//  ThreadDemo
//
//  Created by Fox on 12-5-13.
//  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//

#import "ViewController.h"
#import "myThread.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
[super viewDidLoad];
//创建子线程1,使用detachNewThreadSelector无任何返回对象供操作,用户无法管理生成的线程,管理权为系统所有
[NSThread detachNewThreadSelector:@selector(addAction) toTarget:self withObject:nil];

//创建子线程2,线程状态由用户来管理
NSNumber *maxNumber = [[NSNumber alloc] initWithInt:120];
NSThread *mThread = [[NSThread alloc] initWithTarget:self selector:@selector(addNumberTo:) object:maxNumber];
[mThread start];//启动线程

//创建子线程3,通过用户自定义的方式创建
myThread *_thread = [[myThread alloc] init];
[_thread start];
}

- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

- (void)addAction{

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int number = -1;
int sum = 0;
while (number++ <= 100) {
sum += number;
}
NSLog(@"子线程1执行,the number is:%d",sum);

[pool release];
}

- (void)addNumberTo:(NSNumber *)maxNumber{

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int number = -1;
int sum = 0;
while (number++ <= [maxNumber intValue]) {
sum += number;
}
NSLog(@"子线程2执行,the number is:%d",sum);

[pool release];
}

@end


  自定义的线程类:

myThread.h

#import <Foundation/Foundation.h>

@interface myThread : NSThread

@end


myThread.m

//
//  myThread.m
//  ThreadDemo
//
//  Created by Fox on 12-5-13.
//  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//

#import "myThread.h"

@implementation myThread

//重写线程的入口函数,在此添加线程方法
- (void)main{

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int number = -1;
int sum = 0;
while (number++ <= 100) {
sum += number;
}
NSLog(@"子线程3执行,the number is:%d",sum);

[pool release];
}

@end


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