我有这个问题。我有两个IBOutlets和属性,我保留它们。
@interface MCNavigationController : UIViewController
@property (retain, nonatomic) IBOutlet UIView *contentView;
@property (retain, nonatomic) IBOutlet MCNavBar *navBar;
@end
问题是在dealloc中,在我完成所有版本之后,contentView和navBar仍然没有被释放。
- (void)dealloc
{
[contentView release];
NSLog(@"%@",contentView.superview);
[navBar release];
NSLog(@"%@",navBar.superview);
NSLog(@"%@",self.view);
[super dealloc];
NSLog(@"%@",navBar.superview);
NSLog(@"%@",contentView.superview);
NSLog(@"%@",self.view);
}
在日志中,这就是我得到的:
2012-08-21 14:48:05.646 ShopRite[4250:12503] <UIView: 0x66b77d0; frame = (0 0; 320 416); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x66b7800>>
2012-08-21 14:48:05.649 ShopRite[4250:12503] <UIView: 0x66b77d0; frame = (0 0; 320 416); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x66b7800>>
2012-08-21 14:48:05.650 ShopRite[4250:12503] <UIView: 0x66b77d0; frame = (0 0; 320 416); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x66b7800>>
2012-08-21 14:48:05.650 ShopRite[4250:12503] <UIView: 0x66b77d0; frame = (0 0; 320 416); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x66b7800>>
2012-08-21 14:48:05.651 ShopRite[4250:12503] <UIView: 0x66b77d0; frame = (0 0; 320 416); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x66b7800>>
2012-08-21 14:48:13.726 ShopRite[4250:12503] *** -[MCNavigationController view]: message sent to deallocated instance 0x66b5f20
但是我应该收到一条消息“发送给navBar和contentView的deallocated实例,就像我和self.view一样。我很确定我不会将它们保留在其他任何地方或者将它们添加到其他视图中。” p>
任何建议都将不胜感激。
答案 0 :(得分:1)
在我完成所有发布后,contentView和navBar仍然没有 解除分配。
可以通过多种方式保留这些观点:
UIViewController
dealloc
中发布,dealloc
发生在您UIViewController
的 end ,所以它没有发生在你把它记录下来。dealloc
的{{1}}中发布,该dealloc
发生在{{1}}的 end 。答案 1 :(得分:-1)
我假设您正在使用xib。
如果您正在使用xib,那么当它将从superview中移除或从窗口中删除时将会被释放。
当我们使用IBOutlet时,我们不需要发布。