在Obj-C中的方法内创建对象时,内存会发生什么变化?

时间:2013-10-23 01:34:07

标签: objective-c memory methods

当您在方法中实例化一个对象时,当该方法被调用时,该对象将被分配内存但是该对象将保持对该对象的引用,或者当该方法结束时它将被自动释放。感谢。

3 个答案:

答案 0 :(得分:0)

在OS X和iOS 5+中,Objective-C使用Automatic Reference Counting。在这种情况下,当对象超出范围时,就会释放该对象,就像您期望的那样。

在此之前,您需要明确保留和释放对象。 Here's a useful article from 2010 on this topic.

  

Objective-C中的保留计数模式(不使用垃圾收集)是一种   简单的想法。当您显式分配对象时,它会获得保留   计数为1,当你在对象上调用release或autorelease时它就是   保留计数递减,然后收集对象。   它是iOS设备上唯一可用的模式,并且一直在使用   自操作系统开始以来的Mac OS X.

答案 1 :(得分:0)

简短回答,如果您使用ARC(自动保留计数)或对象是自动释放,则会在适当时发送release消息。

如果您手动管理内存,则必须在releasenewalloc返回这些对象时手动向其发送retain方法, copymutableCopy,否则对象将泄漏,因为当堆栈被拆除时,您将丢失对它的任何引用。

答案 2 :(得分:0)

如果您的应用程序是ARC,那么它将在超出范围后被取消分配。如果对象是类的属性,则它将根据是否定义为strongweak而由不同的规则清除。强意味着只要拥有它的对象指向它就不会清理对象(因此只要拥有它的对象存在,它就不会被清除)。弱意味着只要另一个对象指向该对象,该对象就不会被清除。