创建线程有三种方法:
一、通过[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