因为如果运行Instruments并选择了Activities Monitor,那么在iPhone 4S上运行的应用程序在发布上下文时使用4.88MB,如果上下文 不是,则也是4.88MB 发布。这是否意味着释放上下文是可选的? (我认为实际上是必需的)。上下文由CGContextRef
变量引用。 (正在使用ARC)。
为Retina显示器创建的上下文为CGBitmapContext
,因此大约640 x 640,并且有4个这样的上下文,它们都是在viewDidAppear
中创建的,我想如果1个像素是4个字节,那么每个上下文已经是1.6MB。可能是viewDidAppear
完成后,上下文会自动释放吗?基本上,我从那些位图上下文生成CGImage
个对象,并将CALayer
个对象指向的CGImage对象设置为layer.contents = (__bridge id) cgImage;
,因此不再需要位图上下文。它使用Xcode 4.3编译,使用ARC,并针对iOS 4.3。 (但我认为CGContextRef
不是ARC的一部分。)
更新:更正:它应该是“从那些CGBitmapContext生成CGImage对象,并将这些CGImage对象设置为CALayer”(编辑原始问题以反映这一点。)
答案 0 :(得分:5)
释放CGContextRef不是可选的,但您应该知道是否需要释放它。它遵循标准的手动内存管理规则。如果您拥有所有权(分配,创建,保留和其他一些),您必须释放所有权(发布)。如果您在没有所有权时发布,那就是过度发布。
你可能看到的是,即使你释放了这个物体,其他人也会保留它。它可能是您的视图层次结构中的某些内容。释放所有权后未释放的对象通常不是问题。