【问题标题】:Do I have a memory management problem in here?我这里有内存管理问题吗?
【发布时间】:2023-04-01 07:15:01
【问题描述】:

这里的代码一定有问题:

+ (UIImage*)captureView:(UIView *)theView {
    UIGraphicsBeginImageContext(theView.frame.size);
    [theView.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

当我使用它时,Xcode 会抛出这个错误消息:

malloc: * 对象错误 0x103f000: 没有被释放的指针 已分配 * 在 malloc_error_break 中设置断点进行调试

我在那里看不到任何内存管理错误。还有其他人吗?

【问题讨论】:

  • 你是否像它告诉你的那样在malloc_error_break 上设置了断点?如果是,调用堆栈是什么?

标签: iphone memory-management core-graphics quartz-graphics quartz-2d


【解决方案1】:

我也有同样的警告。但是,在 3.1 或更高版本中不会出现。

【讨论】:

  • 可能是一个框架错误。只有当我调用 -removeFromSuperview 时才会发生这种情况。当我在正常的视图控制器删除过程中删除它时,这也会删除视图,那么一切都很好。
【解决方案2】:

没看到。在构建中启用NSZombie 以跟踪它。

这可能与从可能位于临时自动释放池中的类方法返回自动释放的 UIImage 有关。该图像可能会因该池的排水而被破坏。要进行测试,请将方法移至实例方法并查看问题是否消失。

【讨论】:

  • NSZombie 在这里没有多大帮助,因为堆栈跟踪中的代码只是 arm 指令。在 main() 函数启动之前,我自己的东西在那里什么都看不到。感谢类方法的提示。把它作为实例方法,但它没有解决问题。
  • NSZombie 在这里无济于事,因为这似乎发生在 ObjC 层“下方”(malloc 错误)。
猜你喜欢
  • 2017-09-30
  • 2011-08-04
  • 2013-03-25
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多