在使用 CALayer 渲染开发 Mac OSX 应用程序时,我们发现 Apple 官方示例代码 'CALayerEssentials' 可能会导致装有 OSX 10.7.4 的新 MacBook Pro(2012 年中 15' Retina)上的内存泄漏。
内存泄漏一般描述:
- 使用 Xcode 运行“CALayerEssentials”项目;(你可以在 Xcode Organizer -> OS X 10.7 Core Library -> Graphics & Animation -> Animation -> CALayerEssentials 下找到这个项目)
- 打开 Instruments Leaks 模板,并附加到 CALayerEssentials 进程 ID;
- 开始记录,Leaks 会提示大约每 10 秒发生一次内存泄漏;
- 在 Leaks Object 面板中,有一个项目 'Malloc 48 Bytes' 随着计数和内存大小的增加;
- 大约 15 分钟后,泄漏大小将增加到大约 2.48 MB;
- 大约 78 分钟后,泄漏大小将增加到大约 23.54 MB;
- 通过检查 vmmap 结果地址区域中的泄漏地址,表明所有地址都与 QuartzCore_0x6bb2a800 有关,如下行:
MALLOC_OTHER 086af000-086d1000 [ 136K] rw-/rwx SM=COW QuartzCore_0x6bb2a800
这是运行 CALayerEssentials 并监控其内存泄漏的屏幕截图:http: //smartsweetie.com/uploads/screenshot1.png
这是内存泄漏机器系统配置:
- 机器:MacBook Pro(2012 年中,15' Retina)
- 处理器:2.3 GHz 英特尔
- 酷睿 i7 内存:8 GB 1600 MHz DDR3
- 显卡:NVIDIA GeForce GT 650M 1024 MB
- 软件:Mac OS X Lion 10.7.4 (11E2620)
但是,在其他机器上运行相同的 CALayerEssentials 不会有 CALayer 内存泄漏问题。
- 机器:MacBook Pro(2011 年末,15')
- 处理器:2.2 GHz 英特尔酷睿 i7
- 内存:4 GB 1333 MHz DDR3
- 显卡:AMD Radeon HD 6750M 512 MB
- 软件:Mac OS X Lion 10.7.4 (11E53)
装有 OS X 10.7.4 的新 MacBook Pro 上的 CALayer 内存泄漏是否存在任何已知问题?或者有什么建议可以进一步调查这个问题?