objective-c – 何时释放的对象最终被销毁?

objective-c – 何时释放的对象最终被销毁?,第1张

概述当你在Objective-C中释放一个对象时(假设它的释放计数为1),它的释放计数减少到0并调用dealloc方法.对象是在那里被破坏然后在[super dealloc]之后被破坏了,还是被添加到池中并在池被耗尽时被销毁? 我假设释放的对象在dealloc结束时被销毁(当调用[super dealloc]时)我知道自动释放变量被添加到池中,只是想确定正常释放对象会发生什么. 干杯 – 加里 – 首 当你在Objective-C中释放一个对象时(假设它的释放计数为1),它的释放计数减少到0并调用dealloc方法.对象是在那里被破坏然后在[super dealloc]之后被破坏了,还是被添加到池中并在池被耗尽时被销毁?

我假设释放的对象在dealloc结束时被销毁(当调用[super dealloc]时)我知道自动释放变量被添加到池中,只是想确定正常释放对象会发生什么.

干杯 – 加里 –

解决方法 首先,Objective-C编程语言没有任何内存管理的概念.内存管理内置于Foundation(Mac OS X的 Cocoa和iPhone OS上的Cocoa touch的通用框架). Foundation添加了一个根类NSObject,它在Objective-C运行时的class_createInstance()和object_dispose()函数之上实现了alloc,retain,release和autorelease作为方便包装器.

由于Objective-C与内存管理无关,因此在NSObject no-ops上添加垃圾收集和制作所有内存管理方法非常简单.但是在iPhone OS和传统的Mac OS X上没有垃圾收集,我们在Cocoa中使用引用计数方案.

在NSObject上调用alloc类方法或从Foundation调用nsproxy时创建一个对象.这些默认实现将调用class_createInstance(),因此您永远不需要手动执行.

当在根类NSObject上运行dealloc时,对象“死”.这是通过调用object_dispose()释放堆上对象的内存时,只要从Foundation继承NSObject或nsproxy,就不需要自己调用此函数.

就运行时而言,自动释放的对象没有任何特殊处理,自动释放的对象与任何其他对象一样活着.自动释放对象时会发生什么?

-(ID)autorelease; {  [NSautoreleasePool addobject:self];  // retain count +1  [self release];                      // retain count -1  return self;}

调用自动释放不会减少保留计数,它只会将对象的所有权从调用者转移到当前的自动释放池.稍后当前自动释放池消失时,它将调用它拥有的所有对象的释放,并且释放任何不再拥有的任何对象.

总结

以上是内存溢出为你收集整理的objective-c – 何时释放的对象最终被销毁?全部内容,希望文章能够帮你解决objective-c – 何时释放的对象最终被销毁?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1220194.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存