![]() |
1
11
-ImageNamed:返回一个自动释放的图像,正如Deanwombourne所说,它将在将来的某个时间自动释放(确切时间未定义)。 它没有像您习惯的那样自动释放的原因是-imagename还缓存它返回的图像。缓存正在保留图像。 所以基本上,保留周期是这样的:
如果不释放它,则缓存将继续保留图像,直到释放它为止,例如在出现内存警告时。因此,当使用imagename获取图像时,在清除缓存之前,它不会被释放。 希望这能解决问题。 |
![]() |
2
8
是的,很奇怪。但并非完全无法解释。这就是我想发生的事情。
你是对的;
如果您将代码留在运行中,自动释放池最终将再次尝试释放它,并且 然后 你会得到你期望的错误。 你实际上回答了我们自己的问题——你说“应该在自动释放发生时中断”,这是绝对正确的,当自动释放发生时,它将中断:) 其他的例子会中断,因为您通过直接调用它们或者做足够多的事情来强制发布,从而触发autorelase池来运行并为您调用release。(您无法预测自动释放池何时运行,您只需知道在运行循环的某一点上,自动释放的东西会被释放。) |
![]() |
3
0
你说“这应该打破”
你错了。 如果uiimage是你和我从我们的cocoa书中写作和学习写作的类的一个例子,它可能会被打破,但是我们没有写它,所以我们不应该猜测它的实现。 uiimage如何工作是一个实现细节,而不是您关心的问题。你所知道的是,如果你遵守这些规则,你应该能够期望它能起作用,我相信这些规则现在被称为“毒品”,而你在这里还没有做到。如果不正确地使用对象,就不能保证它们“断裂”。当您遍历对象时,您不能指望它们被释放——这不是内存管理合同的一部分。 并非所有苹果的对象都像文本书类/实例那样工作——事实上,对象可能被缓存、重用、回收,甚至根本不是对象。 别担心,遵守规则。 |
![]() |
4
0
当我创建此类别时:
当使用+imagename:分配时,似乎未调用-autorelease。 但是,当我用+imagename创建了一组这样的文件:然后得到一个内存警告时,我可以看到它们全部释放和释放。这是在iPhoneSimulator4.0上测试的。 |
![]() |
mikko · SwiftUI如何在不同堆栈中实现同一视图的平滑动画 9 月前 |
![]() |
routern · 如何组合contextMenu和圆角矩形? 9 月前 |
![]() |
DevHome98 · 3D触摸不适用于设备swift 1 年前 |
![]() |
dunoiww · 从全屏返回时如何触发onAppear 2 年前 |
![]() |
Community wiki · iPhone上ivar的继承问题 2 年前 |
![]() |
Community wiki · 查找iOS日历 2 年前 |
![]() |
Community wiki · 有效的IPhone编程技术[关闭] 2 年前 |