iPhone开发之多线程使用

本文介绍了在iOS开发中创建和管理线程的三种方法:使用NSThread的detachNewThreadSelector进行不可控线程创建;利用NSThread实例进行可控线程管理;及通过自定义线程类实现线程功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建线程有三种方法:

一、通过[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

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值