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
    

      

  • 相关阅读:
    Struts2中请求参数的接收方式和ModelDriven机制及其运用
    struts2获得请求参数的方式
    参数(parameter)和属性(Attribute)的区别
    getContextPath、getServletPath、getRequestURI,getRealPath的区别
    struts2的result的type属性
    Struts2的值栈和对象栈
    el表达式跟ognl表达式的区别(转)
    Struts学习之值栈的理解
    创建虚拟机-1
    安装kvm模块配置网络
  • 原文地址:https://www.cnblogs.com/foxmin/p/2498121.html
Copyright © 2011-2022 走看看