Foundation与Core Foundation内存管理基本原则简述
内存管理是一个十分重要的事情,稍有不慎就会发生内存泄漏或者是野指针的错误。内存泄漏一般表示没有任何指针指向的内存区域,由于这块内存在对象图中无法查找到,所以有可能永远都无法回收,如果内存泄漏的空间比较大,这对于应用程序的性能是有十分大的影响的,特别是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内存管理基本原则简述的更多相关文章
- Objective-C:Objective-C 和 Core Foundation 对象相互转换的内存管理
Objective-C 和 Core Foundation 对象相互转换的内存管理 iOS允许Objective-C 和 Core Foundation 对象之间可以轻松的转换,拿 NSString ...
- IOS - Foundation和Core Foundation掺杂使用桥接
Foundation和Core Foundation掺杂使用桥接 Toll-Free Bridging 在cocoa application的应用中,我们有时会使用Core Foundation(CF ...
- Objective-C 和 Core Foundation 对象相互转换的内存管理总结
本文转载至 http://blog.csdn.net/allison162004/article/details/38756649 OS允许Objective-C 和 Core Foundation ...
- Core Foundation框架介绍
Core Foundation框架介绍 **参考网址: ARC下OC对象和CF对象之间的桥接 Core Foundation框架介绍 Core Foundation框架 Core Foundation ...
- Linux内核之内存管理完全剖析
linux虚拟内存管理功能 ? 大地址空间:? 进程保护:? 内存映射:? 公平的物理内存分配:? 共享虚拟内存.实现结构剖析 (1)内存映射模块(mmap):负责把磁盘文件的逻辑地址映射到虚拟地 ...
- 《从零开始学Swift》学习笔记(Day 61)——Core Foundation框架之内存管理
原创文章,欢迎转载.转载请注明:关东升的博客 在Swift原生数据类型.Foundation框架数据类型和Core Foundation框架数据类型之间转换过程中,虽然是大部分是可以零开销桥接,零开销 ...
- 《从零開始学Swift》学习笔记(Day 61)——Core Foundation框架之内存管理
原创文章,欢迎转载. 转载请注明:关东升的博客 在Swift原生数据类型.Foundation框架数据类型和Core Foundation框架数据类型之间转换过程中,尽管是大部分是能够零开销桥接,零开 ...
- 《从零开始学Swift》学习笔记(Day 62)——Core Foundation框架之内存托管对象与非托管对象
原创文章,欢迎转载.转载请注明:关东升的博客 内存托管对象 Swift中调用Core Foundation函数获得对象时候,对象分为:内存托管对象和内存非托管对象. 内存托管对象就是由编译器帮助管理内 ...
- iOS开发系列-Foundation与CoreFoundation内存管理
概述 对于初学者来说,可能仅只能将ARC用在objective-c对象上(也即继承自NSObject的对象),但是如果涉及到较为底层的东西,比如Core Foundation中的malloc()或者f ...
随机推荐
- 教你50招提升ASP.NET性能(二十六):对于开发人员的数据库性能技巧
Database Performance Tips for Developers对于开发人员的数据库性能技巧 As a developer you may or may not need to go ...
- 80端口被NT kernel & System 占用pid 4
前段时间停止了Apache,结果在打开的时候发现无法打开,80端口被占用,于是win+r 运行cmd 输入netstat -ano 可以看到80端口被PID4占用,于是打开任务管理器-进程-查看,选择 ...
- SAP BW标准模型简介(BW星形模型 BW Star Schema )
标准星型模型是 数据仓库中一种常用的组织信息和数据的多维数据模型.它由中心的一个事实表(Fact Table)和一些围绕它的维度表(Dimensional Table)组成. 事实(Fact)着眼于 ...
- Amazon DynamoDB 概览
1. 什么是Amazon DynamoDB DynamoDB 是一种快速.全面受管的 NoSQL 数据库服务,它能让用户以简单并且经济有效地方式存储和检索任何数据量,同时服务于任何程度的请求流量.所有 ...
- C#三种模拟自动登录和提交POST信息的实现方法
网页自动登录(提交Post内容)的用途很多,如验证身份.程序升级.网络投票等,以下是用C#实现的方法. 网页自动登录和提交POST信息的核心就是分析网页的源代码(HTML),在C#中,可以 ...
- Android播播放完SD卡指定文件夹音乐之后,自动播放下一首
最近做一个项目,需要连续播放音乐,播放完一首歌之后,自动播放完下一首歌.不要重复播放. 代码如下: package com.example.asyncplayer_ex; import java.io ...
- discuz2.0升级后不能自动跳转问题
/static/js/admincp.js文件有问题,重新覆盖,在后台:运营->更新缓存就ok了
- 谷歌chrome浏览器桌面提醒 webkitNotifications
原创: //点击时开启提醒 $(".message_alert").toggle(function(){ $(".message_alert_tip").htm ...
- Qt... configure: error: Qt (>= Qt 2.2.2) (headers…
转载:http://blog.chinaunix.net/uid-23733724-id-290980.html 昨天开始在自己的fedora12下装qt~ 但是按照教程在/opt/Embed ...
- Java中jar命令详解
做项目的时候我们肯定接触过很多jar包,那么jar包是什么呢?笔者了解到jar是java archive file 的简写.从名字就可以知道,它的应用与Java息息相关.下面就详细介绍如何自己生成ja ...