4

On my quest to reduce memory usage, another question. I see that UIImage and CGImage might be candidates for high memory usage in my app. Wherever I use a UIImage, I try to wrap it in a using block to have it Dispose()'d as soon as possible.

However, often the UIImage ends up in a UIImageView.Image property. If I remove the UIIImageView from its Superview, am I supposed to Dispose() the Image property before and set it to null or is this wasted typing?

4

1 回答 1

3

我应该 Dispose() Image 属性吗

快速回答:没有。

长答案:

UIImageView.Image属性selector被image保留。即使您(从托管端)处置它,原生的retainCount(Objective-C 是引用计数的)UIImage仍将高于 0,并且(原生端)UIImage不会被释放。

当您处理它时,UIImageView它会释放UIImage它使用的(Apple 的 Objective-C 代码),如果 retainCount 达到 0,它将被本机释放。

如果UIImage在您停止需要时和处理时之间有很大的延迟,UIImageView那么您可能需要设置UIImageView.Imagenull. 这将释放(以 ObjC 方式,即将其 retainCount 减一),UIImage并且如果它没有在其他地方使用,它将被(本机)释放。

请注意,如果UIImageView未处置 ,则将其Image属性设置为另一个UIImage将具有相同的结果(旧的将被释放)。

于 2012-05-03T13:34:42.207 回答