在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死;在被其他线程回收之前,它的存储器资源(如栈)是不释放的。相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放。 线程的分离状态 ...
分类:
其他好文 时间:
2017-08-31 13:01:30
阅读次数:
191
1.局部变量:定义在方法中的变量,定义在方法中的参数的变量,定义在for循环中变量,都是局部变量, 在栈内存中开辟一个空间,数据使用完毕,自动释放。 2.何定义一个函数?(不需要死记,只需了解) 1.既然函数是一个独立的功能,那么该功能的运算结果是什么要先明确。 是在明确函数的返回值类型 2.在明确 ...
分类:
编程语言 时间:
2017-08-29 17:18:25
阅读次数:
209
RunLoop 是 iOS 和 OSX 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理。之后会介绍一下在 iOS 中,苹果是如何利用 RunLoop 实现自动释放池、延迟回调、触摸事件、屏幕刷新等功能的。 IndexRunLoop ...
分类:
移动开发 时间:
2017-08-16 21:41:31
阅读次数:
277
本条要点:(作者总结) Objective-C 对象的生命期取决于其引用计数(参见第29条)。在 Objective-C 的引用计数架构中,有一项特性叫做“自动释放池”(autorelease pool)。释放对象有两种方式:一种是调用 release 方法,使其保留计数立即递减;另一种是调用 au ...
分类:
其他好文 时间:
2017-08-12 10:29:22
阅读次数:
212
一.内存的常见分配方式 1. 从静态区分配,一般是全局变量和static类型变量 2.从栈区分配内存,一般是局部的变量,会随着所在函数的结束而自动释放 3.从堆中分配,一般是使用手动分配,使用malloc()函数和new来申请任意大小空间,不过要手动释放空间,相应的使用free()函数和delete ...
分类:
编程语言 时间:
2017-08-02 11:56:26
阅读次数:
207
Java中堆内存和栈内存详解 Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该 ...
分类:
编程语言 时间:
2017-08-01 14:37:48
阅读次数:
128
1. 垃圾回收的意义 在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对象;而在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾。JVM的一个系统级线程会自动释放该内存块。垃圾回收意味着程序不再需要的对象是"无用信息",这些信息将被丢弃。 ...
分类:
其他好文 时间:
2017-07-31 22:58:38
阅读次数:
254
之前,看到关于blcok外使用__weak弱化对象,blcok内再用 __strong 强引用的原因: 保证对象在blcok中不会被提前释放,当blcok执行完之后,自动释放该对象。 今天看了一下__weak修饰的对象,在被使用的时候,每次使用都会被注册到autoreleasepool中,例如: { ...
分类:
其他好文 时间:
2017-07-28 11:09:09
阅读次数:
158
http://draveness.me/autoreleasepool.html 关注仓库,及时获得更新:iOS-Source-Code-Analyze Follow: Draveness · Github 由于 Objective-C 中的内存管理是一个比较大的话题,所以会分为两篇文章来对内存管理 ...
分类:
其他好文 时间:
2017-07-26 14:35:48
阅读次数:
196
线程的释放方式有两种:一种是线程在运行完成后自动释放,一种是手动释放。 无论是那种释放,都应该在线程停止后进行释放。 然而线程的停止也有两种情况:一种是不需要设置标志位,直接完成;一种是由于execute方法中做了循环,需要设置标志位才能停止。 如果线程已经停止并且自动释放,再去手动停止,就会报错。 ...
分类:
编程语言 时间:
2017-07-24 20:21:32
阅读次数:
206