iOS开发之NSObject的多线程

1NSObject的多线程方法用的时候要用@autoreleasepool{}包起来

开启后台执行任务的方法:

- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg

苹果底层允许使用performSelectorInBackground方法在后台线程更新UI,强烈不建议这么做!

在后台线程中通知主线程执行任务的方法:

- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait

wait参数:

YES:会阻塞住线程,直到调用方法完成

NO:不会阻塞线程,主线程其他任务会继续执行

获取线程信息:

[NSThread currentThread]

线程休眠:

[NSThread sleepForTimeInterval:2.0f];

设置线程休眠了2秒

特点:

使用简单,量级轻

不能控制线程的数量以及执行顺序

2NSObject的多线程方法注意事项

NSObject的多线程方法使用的是NSThread的多线程技术。

而NSThread的多线程技术不会自动使用@autoreleasepool。

在使用NSObjectNSThread的多线程技术时,如果涉及到对象分配,需要手动添加@autoreleasepool

3@autoreleasepool

iOS开发中的内存管理:

(1) 在iOS开发中,并没有JAVA或C#中的垃圾回收机制

(2) 使用ARC开发,只是在编译时,编译器会根据代码结构自动添加了retain、release和autorelease

自动释放池的工作原理:

(1)标记为autorelease的对象在出了作用域范围后,会被添加到最近一次创建的自动释放池中

(2)当自动释放池被销毁或耗尽时,会向自动释放池中的所有对象发送release消息

(3)每个线程都需要有@autoreleasepool,否则可能会出现内存泄漏,但是使用NSThread多线程技术,并不会为后台线程创建自动释放池

4、自动释放池常见面试代码

for (int i = 0; i < 10; ++i) {

NSString *str = @"Hello World";

str = [str stringByAppendingFormat:@" - %d", i];

str = [str uppercaseString];

NSLog(@"%@", str);

}

问:以上代码存在什么样的问题?如果循环的次数非常大时,应该如何修改?

答:循环创建了NSString对象,循环次数过多容易导致内存泄漏。如果循环次数比较大,可以用@autoreleasepool{}把整个循环包起来,如果每一次循环都会导致内存泄漏,则把循环内容用@autoreleasepool{}包起来。

时间: 2024-11-07 14:24:02

iOS开发之NSObject的多线程的相关文章

ios开发之 NSObject详解

NSObject是大部分Objective-C类继承体系的根类.这个类遵循NSObject协议,提供了一些通用的方法,对象通过继承NSObject,可以从其中继承访问运行时的接口,并让对象具备Objective-C对象的基本能力.下面我们就详细的介绍NSObject. 一.使用详解 1.加载及初始化类 /** 运行时加载类或分类调用该方法, 每个类只会调用一次 */ + (void)load { } /** 类实例化使用前需要先初始化, 一个类调用一次, 如果子类没有实现该方法则会调用父类方法

IOS开发之NSObject协议类方法说明

oc中NSObject类是所有类的基类,所有类都要继承自它,那么它的方法就显得特别重要,因为所有类都会有这些基本的方法. 看看oc的源码中NSObject是这样定义的: @interface NSObject <NSObject> { Class isa OBJC_ISA_AVAILABILITY; } 可以看出,它实现了NSObject协议,下面我们来看看NSObject协议中定义的方法和属性.顺便将它归类为7大类 @protocol NSObject //*****1.识别类***** @

iOS开发之多XIB之间相互关联

Xib link Xib 1.直接加载xib中的UIView 创建一个View1.xib, 随便设一个背景色,加一个标识UILabel, 这样好知道是这个view是哪一个view. 你可以在这个view上加作意的subview,我只是说明原理,所以这儿并没有加作何subview. 最终我的View1如下图: 由于View1会放到其它View上作为subview,所以这儿size是Freeform, Status Bar是:None. 将下面代码放到viewDidLoad中: &1这行代码就是加载

iOS开发之MVVM在项目中的应用

今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦~). 由于本人项目经验有限,关于架构设计方面的东西理解有限,我个人对MVVM的理解主要是借鉴于之前的用过的MVC的Web框架~在学校的时候用过ThinkPHP框架,和SSH框架,都是MVC的架构模式,今天MVVM与传统的MVC可谓是极为相似,也可以说是兄弟关系,也就是一家人了. 说到架构设计和团队

李洪强iOS开发之RunLoop的原理和核心机制

李洪强iOS开发之RunLoop的原理和核心机制 搞iOS之后一直没有深入研究过RunLoop,非常的惭愧.刚好前一阵子负责性能优化项目,需要利用RunLoop做性能优化和性能检测,趁着这个机会深入研究了RunLoop的原理和特性. RunLoop的定义 当有持续的异步任务需求时,我们会创建一个独立的生命周期可控的线程.RunLoop就是控制线程生命周期并接收事件进行处理的机制. RunLoop是iOS事件响应与任务处理最核心的机制,它贯穿iOS整个系统. Foundation: NSRunLo

李洪强IOS开发之-iOS经典面试题

李洪强IOS开发之-iOS经典面试题 写这篇文章的目的是因为前两天同学想应聘iOS开发,从网上找了iOS面试题和答案让我帮忙看看.我扫了一眼,倒吸了一口冷气,仔细一看,气的发抖.整篇题目30多个没有一个答案是对的,总结这篇面试题的作者对iOS机制根本就是一知半解就敢发到网上,不管有心还是无心都是坑害新人.所以在这里总结一下这几年面试别人和被别人面试遇到的一些我认为比较好的基础题目分享给大家,进阶题目在后续补充.我的理解如果有错漏请一定指出,非常感谢! 从12年开始做面试官到现在已经三个年头了,这

李洪强iOS开发之Block和协议

李洪强iOS开发之Block和协议 OC语言BLOCK和协议 一.BOLCK (一)简介 BLOCK是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,BLOCK可以在任何时候执行. BOLCK和函数的相似性:(1)可以保存代码(2)有返回值(3)有形参(4)调用方式一样. 标识符 ^ (二)基本使用 (1)定义BLOCK变量 Int (^SumBlock)(int,int);//有参数,返回值类型为int Void (^MyBlock)()://无参数,返回值类型

【IOS开发之Objective-C】数据持久化--文件和归档

在OC中数据持久化的方式有多种,例如:写入一个文件再或是归档.写入文件的方式我们一般都可以直接读取文件中的数据.比如我把数据写进一个XX.txt文档里面.只有数据写入成功了我就可以直接读取这个文件了.但是这样对于一些用户关键的数据并不能起到保密的作用,如果需要保密还需要使用归档操作. 文件的操作 //首先声明一个字符串 NSString * str1 = @"123456789"; 方式一 直接使用方法: - (BOOL)writeToFile:(NSString *)path ato

【IOS开发之Objective-C】协议和代理

在现实生活中我们存在各种各样的协议,但是都有一个共同点,就是拟定的协议,就要遵守,不遵守就是违约.在OC中也有协议这一个概念而且和我们现实生活中的协议的特点是类似的.有时我们自己想做什么事,但是现在没这个能力自己去做,亲力亲为,我们就需要找代理来帮我们做了.那么在OC中也有代理这个概念.下面就简单的说说OC中的协议和代理. 一.协议 在<[IOS开发之Objective-C]对象的交互>中实现了一种对象的交互的方式.在OC中还有其他方式,比如说协议,在OC中用协议来规范接口,是实现对象之间的交