当您在方法中实例化一个对象时,当该方法被调用时,该对象将被分配内存,但是哪个对象将持有对该对象的引用,或者在方法结束时它会自动被释放。谢谢。
3 回答
在 OS X 和 iOS 5+ 中,Objective-C 使用自动引用计数。在这种情况下,对象会在超出范围时被释放,正如您所期望的那样。
在此之前,您需要显式地保留和释放对象。这是 2010 年有关此主题的有用文章。
保留计数模式下的 Objective-C(不使用垃圾收集)是一个简单的想法。当您显式分配一个对象时,它的保留计数为 1,当您在一个对象上调用 release 或 autorelease 时,它的保留计数会减少,然后该对象将被收集。它是 iOS 设备上唯一可用的模式,自 OS 开始以来一直在 Mac OS X 上使用。
简短的回答,如果您使用 ARC(自动保留计数)或者如果对象是自动释放的,它将release
在适当的时候发送一条消息。
如果您手动管理内存,则必须在这些对象由, ,或release
中返回时手动向这些对象发送一个方法,否则该对象将泄漏,因为当堆栈被拆除时您将丢失对它的任何引用。new
alloc
retain
copy
mutableCopy
如果您的应用程序是ARC,那么它将在超出范围后被释放。如果对象是一个类的属性,那么它将被不同的规则清理,具体取决于它是定义为strong
还是weak
。强表示只要拥有它的对象指向它就不会清理该对象(因此只要拥有它的对象存在就不会被清理)。弱意味着只要另一个对象指向它,该对象就不会被清理。