内存管理是一个十分重要的事情,稍有不慎就会发生内存泄漏或者是野指针的错误。内存泄漏一般表示没有任何指针指向的内存区域,由于这块内存在对象图中无法查找到,所以有可能永远都无法回收,如果内存泄漏的空间比较大,这对于应用程序的性能是有十分大的影响的,特别是IOS中这种内存空间十分有限的系统内。野指针一般表示一块已经被回收或重新分配的内存区域,通过野指针操作这块内存都有可能引发无法预测的错误。

  那么如何正确的分配和释放内存是开发一款高性能的APP的一个重要方面。

  Apple官方定义了一套规范来约定我们开发中的一些内存管理原则。IOS中,Foundation(基于Objective-C)和Core Foundation(基于C语言)有着不同的规范。下面列举在ARC和MRC的两种环境下的编码规则。

一、Foundation中的内存管理原则

  若方法名以:alloc/new/copy/mutablecopy开头

  1、MRC

    调用者需要负责释放(release)方法所返回的对象

  2、ARC

    编译器在编译阶段会自动根据上述规定来生成释放(release)方法。程序员无须手动释放,其实也不能调用释放相关方法,编译器会报错。

二、Core Foundation中的内存管理原则

  若方法名中带有:create/copy/new/retain字眼,这个时候情况和Foundation中不一样,无论是ARC还是非ARC,我们都需要调用对应方法来释放对象例如:

  CFRelease(xxx);来释放Core Foundation对象。值得注意的是,我们使用CoreGraphics绘图框架, CGPathCreateMutable()也需要遵守上述原则,因为CoreGraphics是基于Core Foundation的。

  其实有时候也不需要死记到底要不要release,只要方法名满足上述要求,下面自觉调用release,编译器报错就说明这件事,编译器已经帮我们做了,我们不需要再做释放操作。当然这仅仅是一种非常规手段,个人只要牢记:编码和做人一样,都应该负起责任,你既然创建了它,就有责任释放它,你既然告诉系统你想使用它,那你也有责任去释放它,我们既然把它带到这个世界,就不能放任不管,那样简直天理难容。好吧,扯远了!有关于内存管理中的几个常见关键字(strong\weak\retain\assign\copy\unsafe_unretained)的意义,有时间再从为知笔记上整理过来。

Foundation与Core Foundation内存管理基本原则简述的更多相关文章

  1. Objective-C:Objective-C 和 Core Foundation 对象相互转换的内存管理

    Objective-C 和 Core Foundation 对象相互转换的内存管理 iOS允许Objective-C 和 Core Foundation 对象之间可以轻松的转换,拿 NSString ...

  2. IOS - Foundation和Core Foundation掺杂使用桥接

    Foundation和Core Foundation掺杂使用桥接 Toll-Free Bridging 在cocoa application的应用中,我们有时会使用Core Foundation(CF ...

  3. Objective-C 和 Core Foundation 对象相互转换的内存管理总结

    本文转载至 http://blog.csdn.net/allison162004/article/details/38756649 OS允许Objective-C 和 Core Foundation ...

  4. Core Foundation框架介绍

    Core Foundation框架介绍 **参考网址: ARC下OC对象和CF对象之间的桥接 Core Foundation框架介绍 Core Foundation框架 Core Foundation ...

  5. Linux内核之内存管理完全剖析

    linux虚拟内存管理功能 ? 大地址空间:? 进程保护:? 内存映射:? 公平的物理内存分配:? 共享虚拟内存.实现结构剖析   (1)内存映射模块(mmap):负责把磁盘文件的逻辑地址映射到虚拟地 ...

  6. 《从零开始学Swift》学习笔记(Day 61)——Core Foundation框架之内存管理

    原创文章,欢迎转载.转载请注明:关东升的博客 在Swift原生数据类型.Foundation框架数据类型和Core Foundation框架数据类型之间转换过程中,虽然是大部分是可以零开销桥接,零开销 ...

  7. 《从零開始学Swift》学习笔记(Day 61)——Core Foundation框架之内存管理

    原创文章,欢迎转载. 转载请注明:关东升的博客 在Swift原生数据类型.Foundation框架数据类型和Core Foundation框架数据类型之间转换过程中,尽管是大部分是能够零开销桥接,零开 ...

  8. 《从零开始学Swift》学习笔记(Day 62)——Core Foundation框架之内存托管对象与非托管对象

    原创文章,欢迎转载.转载请注明:关东升的博客 内存托管对象 Swift中调用Core Foundation函数获得对象时候,对象分为:内存托管对象和内存非托管对象. 内存托管对象就是由编译器帮助管理内 ...

  9. iOS开发系列-Foundation与CoreFoundation内存管理

    概述 对于初学者来说,可能仅只能将ARC用在objective-c对象上(也即继承自NSObject的对象),但是如果涉及到较为底层的东西,比如Core Foundation中的malloc()或者f ...

随机推荐

  1. 更新插件时提示“正在更新缓存”“正在等待jockey-backend退出”

    Ubuntu 11 更新语言插件, 更新时 提示正在更新缓存”“正在等待jockey-backend退出”,然后就不动了. 解决方案: 在终端中键入ps -e | grep jockey 系统会显示一 ...

  2. 基础数据结构 之 栈(python实现)

    栈是编程开发中的两种较为简单的数据结构.栈和队可用于模拟函数的递归.栈的特点是后进先出.其常用操作包括:出栈,入栈等.在出栈前,需判断栈是否为空.在入栈时,需判断栈是否已满. 下面给出一个用pytho ...

  3. Codeforces Round #330 (Div. 1) A. Warrior and Archer 贪心 数学

    A. Warrior and Archer Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/594 ...

  4. HDU 4122 Alice's mooncake shop 单调队列优化dp

    Alice's mooncake shop Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem ...

  5. Codeforces Round #Pi (Div. 2) E. President and Roads tarjan+最短路

    E. President and RoadsTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/567 ...

  6. TC SRM 664 div2 A BearCheats 暴力

     BearCheats Problem Statement    Limak is an old brown bear. Because of his bad eyesight he sometime ...

  7. delphi 获取驱动盘的卷标 号

    {获取C盘的卷标 格式化硬盘卷标改变} //GetHardDiskSerial('c:\') function GetHardDiskSerial(Drive: string): string; va ...

  8. Cache选型的一些思考

    Cache对于减轻DB负载有非常关键的数据.以下对经常使用的memcached和redis做个总结,便于技术选型. 1 memcached  (1) 支持的操作有限,支持经常使用的set,get,de ...

  9. [Angular 2] Understanding Pure & Impure pipe

    First, how to use a build in pipe: <div class="pipe-example"> <label>Uppercase ...

  10. linux编程基础

    http://blog.csdn.net/jnu_simba/article/details/8806654