当前位置:  开发笔记 > IOS > 正文

iPhone内存管理和发布

如何解决《iPhone内存管理和发布》经验,为你挑选了1个好方法。

这是我经常看到的一种常见做法(包括来自非常受欢迎的iPhone开发者书籍)

在.h文件中:

@interface SomeViewController : UIViewController
{
  UIImageView *imgView;
}

在.m文件中的某个地方:

imgView = [[UIImageView alloc] initWithFrame:[[UIScreen mainScreen]
applicationFrame]];
[imgView setImage:[UIImage imageNamed:@"someimage.png"]];
[self addSubview:imgView];
[imgView release];

后来,我们看到了......

- (void) dealloc
{
  [imgView release];
  [super dealloc];

} 

由于imgView具有匹配的alloc和release,是否需要在dealloc中发布imgView?

addSubview调用保留的imgView在哪里占了?



1> Daniel Dicki..:

代码不正确.在你imgView被解除分配后,你最终会被释放.

在.m文件中,您:

    alloc 它 - >你拥有它

    将其添加为子视图 - >您和UIView拥有它

    release 它 - >你不拥有它

然后dealloc,release即使你在我们在上面的步骤3中建立了你不拥有它,你也可以使用imgView.当你打电话时[super dealloc],视图将释放它的所有子视图,我想你会得到一个例外.

如果你想保留一个ivar imgView,我建议你在将它添加为子视图后不要打电话release,并保持dealloc相同.这样,即使imgView在某个时候从视图层次结构中删除,您仍然会有一个有效的引用.

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有