objc提供了两种内存管理的方法

1,MRR manual retain-release

2,  ARC Automatic Reference Counting

基本的内存管理法则:

1, 拥有任何创建的对象,例如new alloc copy等

2, 可以通过retain来获得对象的控制权

3, 当不再需要对象时必须释放

4, 不能释放没有控制权的对象

上面的例子中使用了alloc来获取了对象的控制权,在失去引用之前必须放弃拥有权。但是如果使用release,那么对象就会在return之前被释放掉,最终返回无效的对象。此处使用autorelease表示你将放弃此控制权但是允许在对象被dealloc之前调用函数使用其返回值。

你也可以使用下面的方法,即不alloc来获取拥有权而是直接返回值也是可以的,例如:

- (NSString *)fullName{

NSString *string = [NSString initWithFormat:@"%@ %@", self.firstName, self.lastName];

return string;

}

但是下面这种方法就是错误的

上面的这种方法,调用函数并不拥有此return的string的值,因此调用函数没有理由去释放返回的string,因此就会造成内存泄漏。所谓的拥有就是说使用alloc new retain等来获得其控制权。

执行dealloc来放弃拥有权

dealloc的调用时机:在对象不再有拥有者并且内存回收时会调用这个方法。dealloc会释放对象的内存并处理其所有的资源包括任何实例对其的所有权

当程序结束后,有可能不会为对象发送dealloc消息。因为进程内存在程序退出后会被自动清除,这样做更为方便。

避免为正在使用的object调用dealloc

使用autorelease pool

Autorelease pool只对于在其作用域内显示使用了autorelease的对象起作用

提供了一种机制,在取消对象时防止立即被销毁。一般不需要创建自己的autorelease pool,但是有一些情况必须或者还是很有必要来创建自己的autorelease pool

在autorelease pool块尾,凡是在块儿内有收到autorelease message的对象都会被发送一个release message

可以嵌套使用

三种情况需要创建自己的autorelease pool

1,基于命令行的程序

2,loop中有过多的临时变量

3,启动子线程

启动线程如果使用posix api而不是NSThread,那么除非cocoa当前项目是多线程否则不能使用cocoa。可以使用ismultithreaded方法来判断是否是多线程

ios内存管理笔记(一)的更多相关文章

  1. ios内存管理笔记(三)

    我们在进行iOS开发时,经常会在类的声明部分看见类似于@synthesize window=_window; 的语句,那么,这个window是什么,_ window又是什么,两个东西分别怎么用,这是一 ...

  2. ios内存管理笔记(二)

    1)实现部分: 复制代码 @synthesize window=_window; @synthesize viewController=_viewController; 通常看到的都没有包含=部分,@ ...

  3. IOS内存管理学习笔记

    内存管理作为iOS中非常重要的部分,每一个iOS开发者都应该深入了解iOS内存管理,最近在学习iOS中整理出了一些知识点,先从MRC开始说起. 1.当一个对象在创建之后它的引用计数器为1,当调用这个对 ...

  4. iOS内存管理

    iOS内存管理的方式是引用计数机制.分为MRC(人式引用计数)和ARC(自动引用计数). 为什么要学习内存管理? 内存管理方式是引用计数机制,通过控制对象的引用计数来实现操作对象的功能.一个对象的生命 ...

  5. 【Bugly干货分享】iOS内存管理:从MRC到ARC实践

    Bugly 技术干货系列内容主要涉及移动开发方向,是由Bugly邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处. 对于iOS程序员来说,内存管理是入门的 ...

  6. iOS内存管理个人总结

    一.变量,本质代表一段可以操作的内存,她使用方式无非就是内存符号化+数据类型 1.保存变量有三个区域: 1>静态存储区 2>stack 3>heap 2.变量又根据声明的位置有两种称 ...

  7. iOS内存管理编程指南

    iOS 内存管理 目录[-] 一:基本原则 二:成员变量的内存管理 三:容器对象与内存管理 四:稀缺资源的管理 五:AutoRelease 六:其他注意事项 iOS下内存管理的基本思想就是引用计数,通 ...

  8. iOS内存管理(一)

    最近有时间,正好把iOS相关的基础知识好好的梳理了一下,记录一下内存相关方面的知识. 在理解内存管理之前我觉得先对堆区和栈区有一定的了解是非常有必要的. 栈区:就是由编译器自动管理内存分配,释放过程的 ...

  9. iOS内存管理 ARC与MRC

    想驾驭一门语言,首先要掌握它的内存管理特性.iOS开发经历了MRC到ARC的过程,下面就记录一下本人对iOS内存管理方面的一些理解. 说到iOS开发,肯定离不开objective-c语言(以下简称OC ...

随机推荐

  1. 一次失败的刷题经历:[LeetCode]292之尼姆游戏(Nim Game)

    最近闲来无事刷LeetCode,发现这道题的Accept Rate还是挺高的,尝试着做了一下,结果悲剧了,把过程写下来,希望能长点记性.该题的描述翻译成中文如下: 你正在和你的朋友玩尼姆游戏(Nim ...

  2. 史上最全的MSSQL笔记

    http://www.cnblogs.com/gameworld/archive/2015/09/08/4790881.html

  3. 微信小程序-----校园头条详细开发之列表展示数据

    1.分类列表数据展示功能的实现 1.1 结构 1.2 代码实现 1.2.1  列表显示数据,.每次界面显示6条数据,发请求获取数据,动态存放 var app = getApp() Page({ dat ...

  4. Python-S9-Day99——Web前端框架之Vue.js

    01课程安排 02let和const: 03 箭头函数 04 对象的单体模式 05 Node.js介绍和npm操作 06 Webpack,babel介绍和Vue的第一个案例 01课程安排 1.1 ht ...

  5. c++ 中的slipt实现

    来自 http://www.cnblogs.com/dfcao/p/cpp-FAQ-split.html http://blog.diveinedu.com/%E4%B8%89%E7%A7%8D%E5 ...

  6. [报错处理]Could not find a version that satisfies the requirement xml (from versions)

    安装xml库发生报错 pip3 install xml Collecting xml Could not find a version that satisfies the requirement x ...

  7. Format aborted in 格式化namenode 失败的原因

    [user6@das0 hadoop-0.20.203.0]$ bin/hadoop namenode -format 12/02/20 14:05:17 INFO namenode.NameNode ...

  8. Log4j官方文档翻译(五、日志输出的方法)

    日志类提供了很多方法用于处理日志活动,它不允许我们自己实例化一个logger,但是提供给我们两种静态方法获得logger对象: public static Logger getRootLogger() ...

  9. js处理浮点数计算误差

    众所周知,浮点计算会产生舍入误差的问题,比如,0.1+0.2,结果应该是0.3,但是计算的结果并不是如此,而是0.30000000000000004,这是使用基于IEEE754数值的浮点计算的通病,j ...

  10. ionic2实战-使用Chart.js

    前言 Chart.js官网 Chart.js中文文档 安装Chart.js 执行cnpm install typings -g,全局安装Typings 执行typings search chart.j ...