在.h文件中创建3个对象,如下所示
IBOutlet UIScrollView *scrollView;
IBOutlet UITextView *txtMessage;
IBOutlet UIWebView *webView;
在xib中,连接所有3个对象在xib中的层次结构,如
**View
---UIScrollView
---UITextView
---UIWebView**
然后,我使用dealloc方法打印retainCount
NSLog(@"scrollView retainCount:%d",[scrollView retainCount]);
[scrollView release];scrollView=nil;
NSLog(@"txtMessage retainCount:%d",[txtMessage retainCount]);
[txtMessage release];txtMessage=nil;
NSLog(@"webView retainCount:%d",[webView retainCount]);
[webView release];webView=nil;
在控制台上,我得到了如下所示
scrollView retainCount:3
txtMessage retainCount:2
webView retainCount:2
我想知道为什么会发生这样的事情,还有一件事是如何在dealloc方法中释放这个对象…
发布于 2011-09-30 06:48:50
答案是:你不能释放它们。你没有分配] init]那么,它们在内存方面就不是你的责任了。在某种程度上,它们是您的责任的唯一情况是,当您使用IBOutlets的@property (保留)保留它们时。在这种情况下,您将在dealloc中释放它们
在另一个关于仪器和释放xib创建的出口的回答中回答你的评论:如果你释放它们,那么视图将在某个时候被卸载,负责释放.xib中的元素的人(不是你)将再次释放它们,并且它将崩溃;)你为什么返回到另一个视图,内存没有减少是因为当一个视图消失时,它没有被卸载,这只发生在视图控制器被释放时,或者当应用程序得到内存警告时。
发布于 2011-09-30 05:52:00
我不认为你需要在dealloc中做任何事情。在Objective-C中,如果您没有分配/保留任何内容,则无需担心。
https://stackoverflow.com/questions/7606363
复制相似问题