
OC高级编程 iOS与OS X多线程和内存管理
文章平均质量分 88
不爱吃酸的大力水手
遇强则强
展开
-
iOS自动引用计数
引用计数:顾名思义,就是对象当前被引用的计数retainCount。当retainCount为0时,表面当前对象没有被任何其它对象引用;当retainCount不为0时,则对象任被系统中其它对象所引用,所以此时对象还仍被使用中,内存不能被系统所回收。只用当retainCount为0时,对象才能被系统所回收。生成对象的引用计数规则:自己生成的对象,自己持有。 非自己生成的对象,自己也能持有...原创 2018-12-24 22:15:05 · 536 阅读 · 0 评论 -
GCD死锁之你过来啊
死锁 概念 百度百科:两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程 水手理解:线程中存在两个执行的任务A和B,任务A需要任务B执行完成才能往下执行,任务B需要任务A完成执行并返回也才能往下执行,所以导致两个任务互相等待使程序无法继续执...原创 2019-02-19 09:15:53 · 216 阅读 · 0 评论 -
dispatch_semaphore_t合理并发控制
当我们合理地使用GCD,无疑将给我们带来巨大的好处!我们也知道GCD给我们带来方便地同时,它所开启的线程个数却是无法通过提供地函数进行有效控制,若是多线程开发中我们即想使用GCD,又想合理地控制线程个数,使程序高效运行,此时我们想到了dispatch_semaphore_t!!在GCD中有三个函数是semaphore的操作,分别是:dispatch_semaphore_create创建信号...原创 2019-02-16 16:25:22 · 539 阅读 · 0 评论 -
GCD函数基本使用
串行(Serial)任务只能一个个按顺序执行,只能等到上一个任务执行完毕,才能执行当前的任务;并发 (Concurrent):任务不按顺序执行,不用等待上一个任务执行完,多个任务是同时执行的;在异步情况下可开启多个线程执行任务;同步(Synchronous):不具备开启新线程的能力; 任务执行完才返回; 同步函数: dispatch_sync();异步 (Asynchro...原创 2019-02-16 00:10:21 · 1895 阅读 · 0 评论 -
单例模式与多线程
单例程序在运行过程中,保证类只生成一个实例,方便外界使用及节约系统资源。优点:单例模式可以保证系统中一个类生成实例地唯一性方便外界访问; 单例模式因为类控制了实例化过程,所以类可以更加灵活修改实例化过程;缺点:单例对象一旦建立,对象指针是保存在静态区的,单例对象在堆中分配的内存空间,直到退出程序内存才会被系统所回收; 单例不适用于变化的对象,同一类型的对象在不同的用例场景发生变化...原创 2019-02-04 20:42:33 · 306 阅读 · 0 评论 -
Block原理
通过这篇文章,可以让小伙伴能理解Block的使用及注意细节,也让Block代码块在开发中运用得更加恰到好处,本人通过自己的理解来讲解这篇文章,若有错误,欢迎指正!一、原理typedef void(^myBlock)(void);myBlock block = ^{ printf("helloWorld");};block();我们将代码转换为C++源码来进行详细地分析...原创 2019-01-13 22:10:09 · 147 阅读 · 0 评论 -
进程与线程
进程进程具有独立的内存地址空间,是独立的程序; 进程是计算机资源分配和调度的独立单元。线程线程是进程的实体,是CPU分派和调度的基本单元; 不拥有自己独立的系统资源空间,只有运行时必不可少的栈空间资源(如程序计数器、一组寄存器和栈); 与进程中的其它线程共享内存空间; 一个线程可以撤销另一个线程,可实现程序并发执行。区别进程拥有独立的系统资源,线程没有; 一个进程崩溃不会对其它...原创 2019-01-23 22:17:06 · 102 阅读 · 0 评论 -
Block五道题
闲聊前面说到编译器会帮助完成一些 Block 的 copy,也有手动 copy Block。那么 Block 被复制到堆上的情况有(此段摘自于『Objective-C高级编程 iOS与OS X多线程和内存管理』),对于这段话我觉得有必要说说:调用 Block 的 copy 方法时 Block 作为返回值时 将 Block 赋值给附有 __strong 修饰符的成员变量时(id类型或 Bl...原创 2019-01-17 22:17:18 · 230 阅读 · 0 评论 -
AutoreleasePool源码分析
现在我们已经进入了ARC时代,编译器帮我们在编译代码时自动对变量进行内存管理,使开发者不用再为了对象因为内存管理问题而头疼。AutoreleasePool是自动释放池,当我们在使用@autoreleasepool块时,自动释放池将会对池内对象进行管理,直到变量不被使用时,将其内存进行回收。一、调用源码struct __AtAutoreleasePool { __AtAutorelea...原创 2018-12-31 00:18:49 · 363 阅读 · 0 评论 -
GCD简单原理
dispatch_queueGCD队列的获取通常有以下几种方式:主队列:dispatch_get_main_queue实际上是一个宏,它返回的是结构体_dispatch_main_q的地址; 管理队列:_dispatch_mgr_q是管理队列,不对外公开,只在GCD内部使用; 全局队列:dispatch_get_global_queue获取GCD内部定义的6个不同的全局队列,dq_wid...原创 2019-02-13 11:09:03 · 873 阅读 · 0 评论