2012-11-07 99 views
-2

可能重复:
Understanding reference counting with Cocoa and Objective-CiPhone内存管理概念

我在iPhone编程和客观C.内存管理的概念很困惑这是一个iPhone应用程序的性能最有用的概念。我想知道我什么时候应该使用

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init]; 

[obj dealloc] 

什么用的保留?它只增加retainCount 1.它对我来说真的是开销。如何retainCount有助于管理内存。帮我解决这个问题。

+0

切勿在不是'super'的东西上调用'dealloc'。不要在' - (void)dealloc'之外使用'[super dealloc]'。哦,永远不要看'retainCount'。 –

+0

感谢您的链接.. – MouseCrasher

回答

0

保留计数> 0 wi我们将向自动释放池指出您的对象是在该对象仍在使用中,其他对象或其所有者仍然需要使用该对象等。当此计数达到零时,这自动意味着该对象不再需要,因此它将被释放。通常,每个alloc/init,copy,create或retain都必须具有相同的release/autorelease。

另外[obj dealloc],不是一个好习惯。推荐的用法是[obj release]或[obj autorelease]。

1

你不应该调用dealloc方法.... 自动释放池在线程环境和其他一些地方也使用..

的一件事是在iOS 5以上,你不担心有关保留,释放所有东西.. ARC会照顾一切

+0

是的,我知道..但它不是很好的编程方法,无论是在ARC或GC继电器。我们应该拥有自己的内存管理以获得最佳应用性能。 – MouseCrasher

+0

S,它很好有我们自己的内存管理...你只需通过https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html和http:/ /developer.apple.com/library/mac/#documentation/cocoa/conceptual/MemoryMgmt/Articles/MemoryMgmt.html ....这会给你一个想法...而且我认为ARC做得很好..我没有'没有发现任何问题。 –

+0

ohhk ...谢谢.. – MouseCrasher

0

下载该文档在引用计数环境(而不是一个其使用垃圾收集),一个NSAutoreleasePool对象包含已接收的对象一个自动释放消息,当它耗尽时,它向每个这些对象发送释放消息。因此,将autorelease而不是release发送给对象会延长该对象的生命周期,至少在池本身耗尽之前(如果随后保留该对象,则可能会更长)。一个对象可以放入同一个池中多次,在这种情况下,每次将对象放入池中时都会收到一条释放消息。

ClassA * a = [[ClassA alloc] init]; 这里a的保留数是1,而a只有一个所有者。 [保留]; 现在,a的保留数是2,它有两个所有者。

现在您需要释放两次'a'对象。否则,会造成内存泄漏