OGeek|极客世界-中国程序员成长平台

标题: objective-c - 我应该什么时候释放内存,如果有的话? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 16:18
标题: objective-c - 我应该什么时候释放内存,如果有的话?

我已阅读所有 iOS 内存分配/释放基础知识,但在以下内容中找不到任何内容:

我创建了一个小应用程序,它几乎列出了 UIButtons 网格并单击其中任何一个,它会向当前 Controller View 添加 UIScrollView(并在内部添加一堆 UIView 和 UIWebView 等)。

在添加 UIScrollVIew 时,我还添加了一个 UIButton,它将我带回“主网格”,然后从 super View 中删除 UIScrollView。 我释放了我保留/分配的所有东西等,当我使用 Instruments 检查应用程序时,它没有显示任何内存泄漏。

但每次我点击任何 UIButton 对象时,我都会分配更多内存(根据 Instruments)并且它会不断增长 - 从按钮“重新打开”相同类型的 UIScrollView 总是会增加更多内存分配。

如果我在模拟器中模拟内存警告,它会释放一些内存,然后我可以继续增加它。

所以这是我的问题:我是否应该费心尝试以某种方式手动解除分配?如果是这样,我应该在哪里实际执行此操作?我是 Obj-C 的新手,所以我认为我已经涵盖了大部分基础知识,但更高级的主题仍然需要一些帮助。

创建网格:

UIScrollView *grid = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)];
[[self view] addSubview:grid];
[grid release];

添加按钮(在 for 循环中):

UIButton *slotItem = [[UIButton alloc] initWithFrame:CGRectMake(((float) slotWidth * j), ((float) slotHeight * i), (float) slotWidth, (float)slotHeight)];
[grid addSubview:slotItem];

UIWebView *buttonWebThumb = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, slotWidth, slotHeight)];

[buttonWebThumb setBackgroundColor:[UIColor clearColor]];
[buttonWebThumb setOpaque:NO];

[buttonWebThumb loadHTMLString:[NSString stringWithFormat"%@ %@ %@", htmlTop, [[row objectAtIndex:j] objectAtIndex:1], htmlBottom] baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]];
buttonWebThumb.scalesPageToFit = YES;
[slotItem addSubview:buttonWebThumb];
buttonWebThumb.userInteractionEnabled = NO;
buttonWebThumb.exclusiveTouch = NO;
[buttonWebThumb release];

[slotItem addTarget:self actionselector(showPages forControlEvents:UIControlEventTouchUpInside];

[slotItem release];

showPages 方法然后创建另一个 UIScrollView 并在其中添加 1-10 个单独的 UIWebView,并向新的 UIScrollView 添加一个“关闭”按钮。



Best Answer-推荐答案


您可能会看到这一点,因为您在离开之前没有从 View 中删除所有元素。

例如,如果您使用这样的方法退出 View ,请执行以下操作:

- (id) viewExitAction: (id) sender {
  id elem;
  for(elem in buttons) {
    [elem removeSelfFromView];
  }
  // etc
}

这将自动将这些对象的保留计数减少到零。 (前提是您将它​​们添加到 View 中,然后按照您的预期释放它们。)

否则,viewDidUnloaddealloc 方法永远不会被调用。

关于objective-c - 我应该什么时候释放内存,如果有的话?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6091032/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://sqlite.in/) Powered by Discuz! X3.4