2010-08-30 60 views
2

我有一个创建为NSObject的类。 这个类有许多不同类型的属性和方法 等在iOS应用程序中发布定制的NSObject类应用程序

当我在我的应用程序实例化这个类(比如在主视图控制器)我 立即发送释放呼叫,当我使用完。即:

MyObject *myObject = [[MyObject alloc] initWithParameters:parms]; 
[myObject doSomeMethodCall]; 
[myObject release]; 

所以我的问题是: 当我释放myObject的,它会自动释放所有声明的对象,变量等 我在为MyObject .h文件中声明?

OR

我需要创建这将释放所有的这些自定义的释放方法?

请问因为内存管理问题。

谢谢。

回答

5

您需要在对象中实现dealloc方法,并使用该方法释放您拥有的任何资源。

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmObjectOwnership.html#//apple_ref/doc/uid/20000043-SW4

- (void)dealloc { 
    [mainSprocket release]; 
    [auxiliarySprocket release]; 
    [super dealloc]; 
} 

重要提示:你永远不会调用dealloc方法的对象上,它是由当它的时间来清理运行时自动调用。

+0

这很好,但我有一个NSDictionary对象,当我在 - (void)dealloc调用中释放它时,它崩溃了我的应用程序...我找不到原因.. – Zigglzworth 2010-08-30 15:33:30

+0

您是否在其他位置保留该字典? ? – kubi 2010-08-30 15:37:01

+0

不,但我将字典中的值分配给其他对象,如字符串。在我尝试释放NSDictionary之前,这些其他对象是无论如何发布的,但它仍然会崩溃应用程序。另外,当我把[super dealloc]放入我的 - (void)dealloc方法时,它会崩溃我的应用程序。有趣的是,如果我没有使用调试器运行它,它只会崩溃我的应用程序。如果我用调试器运行它并让[super dealloc]调用它不会崩溃。奇怪.. – Zigglzworth 2010-08-30 16:21:07

0

最终,它会调用myObject上的dealloc方法。在myObject的dealloc方法中,您应该释放myObject具有的所有实例变量。另外,请不要忘记[super dealloc]

0

我与Zigglzworth有同样的问题,它是[super dealloc]调用的位置。我在我的-(void)dealloc方法开始时就使用了它,并且每次都会导致崩溃。在变量释放语句之后将[super dealloc]移动到方法的末尾,现在它工作得很好。