IOS多线程开发之NSThread - 新闻资讯 - 云南小程序开发|云南软件开发|云南网站建设-昆明葵宇信息科技有限公司

159-8711-8523

云南网建设/小程序开发/软件开发

知识

不管是网站,软件还是小程序,都要直接或间接能为您产生价值,我们在追求其视觉表现的同时,更侧重于功能的便捷,营销的便利,运营的高效,让网站成为营销工具,让软件能切实提升企业内部管理水平和效率。优秀的程序为后期升级提供便捷的支持!

您当前位置>首页 » 新闻资讯 » 技术分享 >

IOS多线程开发之NSThread

发表时间:2020-11-5

发布人:葵宇科技

浏览次数:49

撮要


        利用NSThread的例子,线程创建、平、线臣蝇步、锁、线程的交互,必要寄看的时线程的交互,果为IOS法则只要止潮能大概建改UI,所以如出有讶佑线程要建改UI的煌宫必要取止程交互,即调用办法- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;实现

示积代码


//
//  ViewController.m
//  NSThreadDemo
//
//  Created by wangwei on 14/12/31.
//  Copyright (c) 2014年 arbboter. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()
{
    NSMutableArray* sellTicketThread;
    NSCondition* sellTicketCondition;
    NSInteger numberOfSellThread;
    NSInteger nunberOfTickets;
}

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    sellTicketThread = [[NSMutableArray alloc] init];
    
    numberOfSellThread = 3;
    nunberOfTickets = 24;
    
    /** create thread */
    NSThread* sellTicket = nil;
    for (NSInteger i=0; i<numberOfSellThread; i++)
    {
        sellTicket = [[NSThread alloc] initWithTarget:self selector:@selector(sellTicket) object:nil];
        sellTicket.name = [NSString stringWithFormat:@"Ticket Windows %ld", i];
        [sellTicketThread addObject:sellTicket];
    }
    
    /** create thread condition */
    sellTicketCondition = [[NSCondition alloc] init];
    
    /** start all thread */
    for (NSThread* t in sellTicketThread)
    {
        [t start];
    }
    
    self.messageTicket.frame = CGRectMake(0, 20, 330, 600);
    self.messageTicket.text = @"Welcome to 12306.\n";
    self.messageTicket.textColor = [UIColor blackColor];
    self.messageTicket.editable = NO;
}

- (void) sellTicket
{
    NSString* message = nil;
    BOOL bRun = YES;
    
    while (bRun)
    {
        [sellTicketCondition lock];
        
        if (nunberOfTickets>0)
        {
            nunberOfTickets--;
            message = [NSString stringWithFormat:@"[%@] get ticket %02ld. [%02ld Left]\n",
                       [[NSThread currentThread] name], nunberOfTickets+1, nunberOfTickets];
        }
        else
        {
            message = [NSString stringWithFormat:@"[%@] Sorry, but we have no ticket lefy.\n", [[NSThread currentThread] name]];
            bRun = NO;
        }
        
        /** 子线程出有磕骣有及建改APP的UI的, 所以必要止晨噢改 */
        [self performSelectorOnMainThread:@selector(addMessageToView:) withObject:message waitUntilDone:YES];

        [sellTicketCondition unlock];
        
        /** wait for a moment */
        sleep(arc4random()%5+1);
    }
}

/** 交摆逝密 */
- (void)addMessageToView:(NSString*)message
{
    self.messageTicket.text = [self.messageTicket.text stringByAppendingString:message];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

胶匣有雅揭示


[img]http://img.blog.csdn.net/20141231161514495?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYXJiYm90ZXI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

紧张办法列表


 //前来当前生程
+ (NSThread *)currentThread;          

// 经过过程类办法创建一个线程
+ (void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(id)argument;

// 判犊嗲可为多线程
+ (BOOL)isMultiThreaded;


- (NSMutableDictionary *)threadDictionary;

+ (void)sleepUntilDate:(NSDate *)date;

+ (void)sleepForTimeInterval:(NSTimeInterval)ti;

//  曲骣线程
+ (void)exit;

// 线程属猩镜
+ (double)threadPriority ;
+ (BOOL)setThreadPriority:(double)p ;

// 线程函飞址
+ (NSArray *)callStackReturnAddresses;

// 扇髅取前来线程称号
- (void)setName:(NSString *)n;
- (NSString *)name;

// 线程堆栈
- (NSUInteger)stackSize;
- (void)setStackSize:(NSUInteger)s;

// 断定当前生程是可为止程
- (BOOL)isMainThread;
+ (BOOL)isMainThread;

+ (NSThread *)mainThread;

// 线程东闻鲺初化早纵   (经过过程创建线程东西 ,必要 脚工指定线程函肥取各类属性)
- (id)init;

// 正在线程东闻鲺初化时创建一个线程(指定线程函肥)
- (id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument;

// 是可正在实行
- (BOOL)isExecuting;

// 是可已渡酒 
- (BOOL)isFinished;

// 是可裁撤的
- (BOOL)isCancelled;

// 裁撤早纵
- (void)cancel;

// 正在止程上实行aSelector所洞喀的代码,果蜗刃些代码只能正在止程上实行,比圆建改UI
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;

// 线程平
- (void)start;

- (void)main;    // thread body method

相关案例查看更多