objective-c的内存管理划分是基本类型存储在栈内(栈内被占用的内存由系统自动释放),对象存储在堆内。由于objc没有垃圾回收机制(GC) 不能自动释放堆中的内存,需要程序员自己手动释放,否则会导致内存溢出。objc的内存管理机制主要有:1、引用计数器 2、属性参数 3、自动释放池。 1、引用
分类:
移动开发 时间:
2016-02-01 14:39:44
阅读次数:
146
1.内存分区情况: a.代码区:存放函数二进制代码; b.数据区:系统运行时申请内存并初始化,系统退出时由系统释放,主要存放常量,静态变量,全局变量; c.堆区:通过malloc等函数或者new动态申请到的,需要程序员手动申请和释放; d.栈区:函数模块内申请,函数结束时由系统自动释放。存放局部变量
分类:
移动开发 时间:
2016-01-29 03:23:09
阅读次数:
225
快速创建对象的时候系统会自动释放一次,如:NSDictionary *dic =[NSDictionary dictionary]; //此时系统自动自动释放一次内存,对象引用计数就 ' -1 '创建(复制)不可变的对象用 copy;创建(复制)可变的对象用 MutableCopy;frame:是以...
分类:
其他好文 时间:
2016-01-24 06:59:35
阅读次数:
172
主要相同点:Lock能完成Synchronized所实现的所有功能。主要不同点:Lock有比Synchronized更精确的线程予以和更好的性能。Synchronized会自动释放锁,但是Lock一定要求程序员手工释放,并且必须在finally从句中释放。synchronized 修饰方法时 表示同...
分类:
编程语言 时间:
2016-01-22 17:48:49
阅读次数:
153
RunLoop 是 iOS 和 OSX 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理。之后会介绍一下在 iOS 中,苹果是如何利用 RunLoop 实现自动释放池、延迟回调、触摸事件、屏幕刷新等功能的。 RunLoop 的...
分类:
其他好文 时间:
2016-01-14 16:10:21
阅读次数:
259
1.autorelease 基本用法对象执行autorelease方法时会将对象添加到自动释放池中当自动释放池销毁时自动释放池中所有对象作release操作对象执行autorelease方法后自身引用计数器不会改变,而且会返回对象本身2.autorelease 的优点autorelease实际上只是...
分类:
移动开发 时间:
2016-01-13 19:54:32
阅读次数:
190
写在前面 最近再看YY大神的YYKit工具,发现在代码中经常使用@autoreleasepool,特别是在与for循环搭配使用的时候。刚开始很不能理解。 之前对iOS的ARC的理解就是自己创建的对象,会在该对象所在是代码快(当前作用域)结束时候自动释放。无需程序员自己管理。但是如果仔细研究YYK.....
分类:
其他好文 时间:
2016-01-10 18:23:10
阅读次数:
156
Java 把内存划分成两种:一种是栈内存,另一种是堆内存。在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个变量时,Java 就在栈中为这个变量分配内存空间,当超过变量的作用域后(比如,在函数A中调用函数B,在函数B中定义变量a,变量a的作用域只是函数B,在函数B运行完以后,变量a会自动被销毁。分配给它的内存会被回收),Java 会自动释放掉为该变量分配...
分类:
编程语言 时间:
2016-01-08 11:40:43
阅读次数:
178
OC中数组对象在是如何处理对象元素的引用计数问题的,同时介绍一下自动释放池的相关概念一、数组对象是如何处理对象元素的引用计数问题[objc]view plaincopy 1. // 2. //main.m 3. //26_NSArrayMemeryManager 4. // 5. //Create....
分类:
其他好文 时间:
2016-01-06 15:41:51
阅读次数:
207
局部变量: 作用域: 函数内(包括形参{除了特殊的形参外})或代码块内 定义:函数内,包括形参,代码块内 生命周期: 从定义的那行开始分配内存,直至其所属代码块内的最后一行结束或者return结束 存储位置: 存储在栈中,当作用域结束后会自动释放的局部变量 注意:不同的作用域可以定义相同的局部变量,...
分类:
其他好文 时间:
2016-01-05 22:31:34
阅读次数:
244