iPhone开发之多线程使用
创建线程有三种方法:
一、通过[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