内存管理之retain计数

  假如使用alloc、new开头或者包含copy函数的方法来创建一个对象,你就拥有了这个对象的所有权。(假如新对象的retain计数为1,并且不在自动释放池里,那么,你就有义务在不用这个对象的时候释放它)。传递对象所有权一些常见的方法是alloc(也经常会跟着init方法),copy和mutableCopy。

  通过其他方式创建的对象,就不一定拥有这个对象的所有权。(新对象的retain计数为1,放在自动释放池中,如果在自动释放池被清空之前,该对象被retain了,那就不会被释放了,否则,这个对象肯定会被释放)。

  加入并不拥有一个对象的所有权,却想让它一直存在,可发生retain消息来获得所有权(这步操作增加了retain计数)

  当有一个对象的所有权,但后面不再需要它时,可发生release和autorelease消息。(release消息立即减少retain计数;autorelease消息只在自动释放池被清空的时候引起release消息的发生。)

  只有对象还有一个所有者,这个对象就不会被释放。(当retain计数变为0时,就发送dealloc消息)

时间: 2024-08-26 10:44:44

内存管理之retain计数的相关文章

Objective-C内存管理之引用计数

初学者在学习Objective-c的时候,很容易在内存管理这一部分陷入混乱状态,很大一部分原因是没有弄清楚引用计数的原理,搞不明白对象的引用数量,这样就当然无法彻底释放对象的内存了,苹果官方文档在内存管理这一部分说的非常简单,只有三条准则: 当你使用new.alloc或copy方法创建一个对象时,该对象的保留指针为1,当不再使用该对象的时候,你应该想该对象发送一条release或autorelease消息,这样,该对象在其寿命结束时将被销毁. 当你通过其他方法获得一个对象时,假设该对象的保留计数

【OC. 内存管理】retain和release

内存管理 任何继承了NSObject的对象,都需要进行垃圾回收,对基本数据类型无效(int float double 指针等) 原理 每个对象内部都保存了一个与之相关联的整数,称为引用计数器,当使用alloc.new或者copy创建一个对象时,对象的引用计数器被设置为1 给对象发送一条retain消息可以使引用计数器值+1: 给对象发送一条release消息可以使引用计数器值-1: 当意个对象的引用计数器值为0时那么他讲被销毁,其占用的内存被系统回收,OC也会自动向对象发送一条dealloc消息

Object-C内存管理-对象引用计数的特例

看到OC中内存管理这块,其中的引用计数部分,由部分10.5上的EBOOK示例已经在10.9上不能运行正确了,比如下面的代码: NSString * str1 = @"string 1"; NSString * str2 = @"string 2"; NSMutableString * mstr3 = [NSMutableString stringWithString: @"string 3"]; NSNumber * int1 = [NSNumb

动态内存管理(引用计数)

c++的动态内存管理是非常重要的,操作不当很容易引起内存泄漏, 下面我详细写了一些内存管理该注意的地方,包括引用计数的实现 深拷贝浅拷贝 #include <iostream>using namespace std; class String{public: String()  :_str(new char[1]) {  *_str = '\0'; } String(char* str)  :_str(new char[strlen(str)+1])  //开辟一段新空间给_str {  st

内存管理1 retain &amp; release

内存管理法则 1:谁创建谁释放alloc /new/ copy------>release/autorelease.一一对应,不是你创建的就不用你释放. 2:除了alloc /new/ copy创建的对象其他的都声明了autorelease. 3:谁retain谁release,只要调用了retain,无论何时生成的对象都应该调用release.

Python内存管理及引用计数

作为一门动态语言,python很重要的一个概念就是动态类型,即对象的类型和内存占用都是运行时确定的.(Why?)运行时,解释器会根据语法和右操作数来决定新对象的类型.动态类型的实现,是通过引用和对象的分离达到的.对象是存放在内存中的数据实体,而引用(reference)可以理解成一个封装好的指向对象的指针.不过操作更加方便和安全.就像C++中的引用是对指针操作的简化和封装一样.在python中,内存的管理,即分配与回收,都是由python解释器来做的,程序员不需要关心太多.或者,也可以把引用理解

cocos2dx中的内存管理机制及引用计数

1.内存管理的两大策略: 谁申请,谁释放原则(类似于,谁污染了内存,最后由谁来清理内存)--------->适用于过程性函数 引用计数原则(创建时,引用数为1,每引用一次,计数加1,调用结束时,引用计数减1,当引用计数为0时,才会真正释放内存) --------->适用于注册性函数(消息处理,中断等场合) 2.cocos2dx中的内存管理采用引用计数和内存托管的原则 spr->retainCount();//获取对象的引用计数值 spr->retain();//引用计数加1 spr

IOS内存管理retain,assign,copy,strong,weak

IOS内存管理retain,assign,copy,strong,weak IOS的对象都继承于NSObject, 该对象有一个方法:retainCount ,内存引用计数. 引用计数在很多技术都用到: window下的COM组件,多线程的信号量,读写锁,思想都一样. (一般情况下: 后面会讨论例外情况)alloc 对象分配后引用计数为1retain 对象的引用计数+1copy copy 一个对象变成新的对象(新内存地址) 引用计数为1 原来对象计数不变 release 对象引用计数-1 如果为

setter 和 getter 高级 以及内存管理初级

setter 和 getter 的演变,紧接setter 和 getter 初级 [email protected] 和  @synthesize 这两个关键字的出现,就是为了剔除代码中的setter方法和getter方法 @property:可以自动生成某个成员变量的setter和getter声明 @property int age;//相当于下面这两句:- (void)setAge:(int)age;- (int)age; @synthesize自动生成age的setter和getter实现