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