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
    

      

  • 相关阅读:
    phpstorm 2016.3.2 的最新破解方法(截止2017-2-20)
    在GitHub多个帐号上添加SSH公钥
    mac laravel 环境变量设置bash_profile
    Laravel的三种安装方法总结
    laravel登录后台500错误!
    composer镜像安装laravel
    phpstorm 代码按列对齐
    .DS_Store 文件是什么?Mac下面如何禁止.DS_Store生成
    如何在Mac下显示Finder中的所有文件
    PHP_环境配置_python脚本_2017
  • 原文地址:https://www.cnblogs.com/foxmin/p/2498121.html
Copyright © 2011-2022 走看看