NSThread多线程总结(一)

一: NSThread 小节

//1. object是传值的对象 创建完成后 自动启动

[NSThread detachNewThreadSelector:@selector(download:) toTarget:self withObject:@"http:"];

//2. 第二种方式 隐事创建  也是自动启动

[self performSelectorInBackground:@selector(download:) withObject:nil];
    //3. 一个NSThread 就代表一个线程对象  第三种 就是alloc init方式直接创建 可以直接拿到对象进行修改 ,而上面两种就不能直接修改其他属性
     NSThread *thread1 = [[NSThread alloc] initWithTarget:self selector:@selector(download:) object:nil];
    thread1.name = @"aren";
    [thread1 start];
    // 睡眠5秒钟

[NSThread sleepForTimeInterval:5];

二:线程安全 互斥锁

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    [self createThread];
   
    NSThread *thread1 = [[NSThread alloc] initWithTarget:self selector:@selector(sale) object:nil];
    thread1.name = @"窗口1";
    [thread1 start];
    NSThread *thread2 = [[NSThread alloc] initWithTarget:self selector:@selector(sale) object:nil];
    thread2.name = @"窗口2";
    [thread2 start];
    NSThread *thread3 = [[NSThread alloc] initWithTarget:self selector:@selector(sale) object:nil];
    thread3.name = @"窗口3";
    [thread3 start];
   
}

//三个线程同时执行这个方法
- (void)sale
{
    while (1) {

// 互斥锁 优点:有效防止多线程抢夺资源造成的数据安全问题

//缺点:需要消耗大量的cpu资源
        //互斥锁的使用前提是:多条线程抢占同一资源
        @synchronized(self) { //开始加锁 保证只有一个线程在执行

int count = self.ticketsCount;

if (count > 0) {
                //睡眠一会
                [NSThread sleepForTimeInterval:0.01];
                self.ticketsCount = count - 1;
                NSLog(@"%@卖了一张,还剩%d张",[NSThread currentThread].name, self.ticketsCount);
            } else {
                [NSThread  exit];
                return; //退出循环
            }

}
    }

}

三:nonatomic 和 atomic 的区别

nonatomic:占用内存资源小,非线程安全,适合移动设备

atomic:占用内存大,线程安全不适合移动设备

时间: 2024-12-13 10:12:08

NSThread多线程总结(一)的相关文章

iOS-有限缓冲问题经典案例-生产者消费者-NSThread多线程

1 #import "ViewController.h" 2 3 @interface ViewController () 4 { 5 NSMutableArray *_arr; 6 NSCondition *_condition; 7 } 8 @end 9 10 @implementation ViewController 11 12 - (void)viewDidLoad { 13 [super viewDidLoad]; 14 15 _arr = [NSMutableArray

NSThread 多线程 三种方式

// //  ZBMainViewController.m //  TestProject // //  Created by 张先森 on 14/12/5. //  Copyright (c) 2014年 zhibin. All rights reserved. // #import "ZBMainViewController.h" @interface ZBMainViewController () @property(nonatomic,strong)CALayer *mylay

NSThread 多线程相关

1.下面的代码,有2点需要注意,1>就是 就是thread:所传得参数,这里传得的是nsarray 当然也可以传其他的类型.2> [self performSelectorOnMainThread:@selector(update) withObject:nil waitUntilDone:YES]; 这个函数的作用是通知主线程进行一下操作,比如这里是更新btn 的title.主要的参数需要注意的是 waitUntilDone ,如果是YES 那就需要等到 update操作完之后才会执行NSL

iOS开发:NSThread多线程的使用

一:创建线程,NSThread创建线程常用的三种方式: //1:手动创建启动 let thread:NSThread = NSThread(target: self, selector:"doSomething:", object: "param") thread.name = "childThread1" //手动创建线程的方式可以设置线程的名称 thread.start() //2:创建完成自动start NSThread.detachNew

NSThread多线程

1 // 2 // ViewController.m 3 // nsthreaddemo 4 // 5 // Created by ys on 15/11/23. 6 // Copyright (c) 2015年 ys. All rights reserved. 7 // 8 //需求分析 9 // 10 //1. UIImageView显示图片 11 //2. UIImage模拟从网络上下载 12 //3. NSString记录图片路径 13 #import "ViewController.h

iOS中多线程_05_线程间通信NSThread/GCD

1.什么叫做线程间通信 在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 2.线程间通信的体现 1个线程传递数据给另1个线程 在1个线程中执行完特定任务后,转到另1个线程继续执行任务 3.线程间通信示例 UIImageView下载图片这个例子, 主线程中开启一个子线程去下载图片, 当图片下载完成之后再回到主线程中更新显示图片, 这样的一个过程就是线程间通信的一个过程. 4.NSThread线程间通信常用方法 // 第一种- (void)performSelectorOnMain

iOS开发多线程网络———NSThread

@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); iOS开发多线程网络———NS

iOS开发——多线程OC篇&amp;多线程详解

多线程详解 前面介绍了多线程的各种方式及其使用,这里补一点关于多线程的概念及相关技巧与使用,相信前面不懂的地方看了这里之后你就对多线程基本上没有什么问题了! 1——首先ios开发多线程中必须了解的概念: 进程 正在进行中的程序被称为进程,负责程序运行的内存分配 每一个进程都有自己独立的虚拟内存空间 线程 线程是进程中一个独立的执行路径(控制单元) 一个进程中至少包含一条线程,即主线程 可以将耗时的执行路径(如:网络请求)放在其他线程中执行 创建线程的目的就是为了开启一条新的执行路径,运行指定的代

iOS开发 - 多线程

知识点 1.理解线程的概念 2.NSThread的使用 3.NSOperation的使用 4.GCD的使用 5.线程锁,线程安全 =============================== 1.多线程是一种实现多任务并发执行的技术,允许同时执行多个任务,能够更合理的利用CPU的资源,提高效率.防止用户界面卡顿. 在iOS中,所有的UI处理只能在主线程做. 什么是进程? · 简单的说进程就是我们电脑上运行的一个个应用程序,每一个程序就是一个进程,并且每个进程之间是独立的,每个进程运行在其专用受