Iphone 内存管理

Iphone 内存管理,iphone,ipad,memory,memory-management,Iphone,Ipad,Memory,Memory Management,iphone支持GC(垃圾收集)吗?如果是的话,那么什么是自动释放。请任何人回答我的问题 正如GC所做的一样,auto release也会做同样的事情,即它会在自己的时间释放内存 例如,一些函数如stringwithformat是自动释放函数,请参见 NSXMLParser*xmlParser[[NSXMLParser alloc]initWithData:xmlData]autorelease] (xmlparser对象也不能评论当这个对象的内存被释放时)就像GC一样 简而言之,我认为ipho

iphone支持GC(垃圾收集)吗?如果是的话,那么什么是自动释放。请任何人回答我的问题

正如GC所做的一样,auto release也会做同样的事情,即它会在自己的时间释放内存

例如,一些函数如stringwithformat是自动释放函数,请参见

NSXMLParser*xmlParser[[NSXMLParser alloc]initWithData:xmlData]autorelease]

(xmlparser对象也不能评论当这个对象的内存被释放时)就像GC一样

简而言之,我认为iphone部分支持GC


Wht说伙计们?

iOS不支持垃圾收集。垃圾收集将删除不再有任何引用的任何对象。在iOS上,如果没有对对象的引用,则内存中的空间将丢失,并且会发生内存泄漏

autoRelease
告诉对象在不久的将来释放。这在某些情况下很有用,例如返回在函数中创建的对象,而您将无法释放它

e、 g:

+(id)createNewObject{ id*newObject=[[Object alloc]init]; [新对象自动释放]; 返回newObject; }
在这种情况下,调用此函数的对象必须保留返回的对象,以便不会将其从内存中删除。

否,iPhone不支持GC

GC与自动释放不同。即使自动释放,您仍可能出现内存管理错误,即内存泄漏和访问已释放的内存。释放和自动释放仍然必须与保留/分配相平衡

Autorelease的存在使得方法可以创建(alloc和init)一个对象并以引用计数为零的方式返回它们,但是调用方法仍然可以访问它们

iphone支持GC(垃圾收集)吗

没有

正如GC所做的一样,auto release也会做同样的事情,即它会在自己的时间释放内存

他们做的事情并不完全一样。Autorelease非常具体地描述了它将释放对象的时间:您确切地知道它将在何时发生

将自动释放发送到对象将在下次当前自动释放池耗尽时释放内存。自动释放池是一种跟踪已发送的对象的工具。
autorelease

默认情况下,只有一个自动释放池,每次在运行循环中,自动释放池都会被排空(即释放其所有对象)

运行循环就是这样工作的。每次事件发生时(如计时器触发或用户与应用程序交互),运行循环都会计算出哪个对象应该处理事件并调用相应的方法。当该方法返回时,运行循环将转到下一个事件,但在此之前,它将耗尽其自动释放池。(这有点简单,但足够理解这个概念。)


这在实践中意味着什么?(我听到你哭了。)这意味着如果你在某个方法中自动释放一个对象,该对象实际上不会被发送到
release
,直到该方法返回,调用它的方法返回,调用它的方法返回,以此类推,一直到顶部。这就是为什么它在从方法返回对象时被大量使用的原因:您知道它们将持续足够长的时间,以便调用方对它们进行评估(并在需要时保留它们)。

听起来您将释放与释放混为一谈。认识到释放对象不会将其从内存中移除,这一点非常重要。通过减少保留计数,释放对象告诉运行时您已经完成了对该对象的处理。当retain计数达到0时,对象实际上从内存中解除分配。因此自动释放与GC不同,因为它只会自动释放对象,而不会自动解除锁定对象

+ (id) createNewObject { id *newObject = [[Object alloc] init]; [newObject autoRelease]; return newObject; }