1

因为如果运行 Instruments 并选择了活动监视器,则在 iPhone 4S 上运行的应用程序在释放上下文时使用 4.88MB,如果未释放上下文,也是 4.88MB 。那么这是否意味着释放上下文是可选的?(我认为实际上是必需的)。上下文由CGContextRef变量引用。(正在使用 ARC)。

上下文是CGBitmapContext为 Retina 显示器创建的,因此大约为 640 x 640,并且有 4 个这样的上下文,它们都是在 中创建的viewDidAppear,我认为如果 1 个像素是 4 个字节,那么每个上下文已经是 1.6MB。难道viewDidAppear是做完之后,上下文就自动释放了?基本上,我CGImage从这些位图上下文生成对象并将 CGImage 对象设置为由对象指向CALayer(使用layer.contents = (__bridge id) cgImage;),因此不再需要位图上下文。它使用 Xcode 4.3 和 ARC 编译,面向 iOS 4.3。(但我认为CGContextRef不是 ARC 的一部分)。

更新:更正:它应该是“从那些 CGBitmapContext 生成 CGImage 对象,并将那些 CGImage 对象设置为 CALayer”(编辑原始问题以反映这一点)。

4

1 回答 1

5

释放 CGContextRef 不是可选的,但您应该知道是否需要释放它。它遵循标准的手动内存管理规则。如果您取得所有权(alloc、create、retain 和其他一些),您必须释放所有权(release)。如果您在没有所有权的情况下发布,那就是过度发布。

您可能看到的是,即使您释放了该对象,其他人仍在保留它。它可能在您的视图层次结构中。在您释放所有权后未释放的对象通常不是问题。

于 2012-08-17T19:05:36.043 回答