• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

objective-c - 我应该什么时候释放内存,如果有的话?

[复制链接]
菜鸟教程小白 发表于 2022-12-12 16:18:28 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我已阅读所有 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap