zoukankan      html  css  js  c++  java
  • 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
    

      

  • 相关阅读:
    bootstrap 导航栏、输入框按钮组、栅格系统
    Python排序算法冒泡排序选择排序插入排序
    Python 解螺旋数组
    初到博客园,请多指教
    gcd, map for ocaml
    qsort for ocaml
    子序列和最大的问题
    将一个整数划分为非负整数的部分
    filter in Ocaml
    scheme中表只能操作头部带来的一个问题
  • 原文地址:https://www.cnblogs.com/foxmin/p/2498121.html
Copyright © 2011-2022 走看看