`

Facebook 的 iOS 内存泄漏监测自动化实践

阅读更多
内存是移动设备上的共享资源,如果一个 App 无法正确地进行内存管理的话,将会导致内存消耗殆尽,闪退以及性能的严重下降。

Facebook 的 iOS 版本的许多功能模块共用了同一份内存空间,如果其中的某一个模块消耗了特别多的内存资源的话,将会对整个 App 造成严重影响。举个栗子,当某个功能模块不小心造成了内存泄漏的时候,这个情况就很有可能会发生。

在 Facebook,我们有非常多的工程师同时在一个代码仓库下进行并行开发。内存泄漏是在开发过程中难以避免会遇见的问题。当内存泄漏发生时,我们就需要快速地去发现然后修复它。

现在已经存在一些开发者工具来辅助发现内存泄漏了,但是它们的共同点是需要大量的人工操作:

打开 Xcode 并选择 build for profiling 来编译你的工程
打开 Instruments 工具
尝试在你的应用上尽可能多地重现更多的场景与行为
观察内存工具的走势图
找到内存泄漏的源头
修复它!
这样的人工排查与修复工程每次都得不断地重复操作。正因为如此,我们很难在迭代阶段早期就定位与修复内存问题。

将内存泄漏的排查过程尽可能地自动化,减少开发人员的人工干预,可以帮助我们更快地去找到内存泄漏的地方。为了解决这个问题,我们已经在内部开发了一套工具来帮助我们自动化这个排查过程,并且已经帮助我们解决了许多代码中存在的内存泄漏问题。今天,我们很高兴向大家宣布我们正式开源这套内存泄漏排查工具:FBRetainCycleDetector,FBAllocationTracker 和 FBMemoryProfiler。

循环引用
Objective-C 使用引用计数来管理内存与释放未被引用的对象。内存中的对象 A 可以让对象 B 的引用计数加一,即 retain,来使对象 B 尽可能久地存在内存中(只要对象 A 不对它“减一”,即 release)。也就是说:对象 A 持有了对象 B 。

大多数情况下,引用计数这套机制都可以运作得很好。但是,当两个对象直接地,或者更常见的情形是通过某些对象间接地,互相持有了对方,这个时候就陷入了僵局了。这种互相持有对方的引用的现象叫做循环引用。



循环引用会导致一系列的问题。最好的情况是,泄漏的对象本身就会一直长期地占用内存空间,这种情况一般不会造成太大的内存消耗。如果泄漏的对象不停地增加与积累,那么 App 中其他功能模块所能使用的内存就会减少。最坏的情况则是,内存泄漏导致了 App 需要使用的内存超出了限制,这时应用就会闪退了。

阅读全文请点击:http://click.aliyun.com/m/9168/
分享到:
评论

相关推荐

    iOS内存监测工具FBMemoryProfiler.zip

    FBMemoryProfiler是Facebook开源的一款用于分析iOS内存使用和检测循环引用的工具库。手机设备的内存是一个共享资源。应用程序可能会不当的耗尽内存、崩溃,或者遭遇大幅度的性能降低。当分配了一块内存,并设置了...

    IOS手机录屏 IOS自动化

    在iOS自动化中,WebDriverAgent (WDA) 是一个关键的组件,它是Facebook开源的一个iOS自动化测试框架,可以用来远程控制iOS设备,包括进行屏幕录制。 iOS录屏的基本操作可以通过系统内置的“屏幕录制”功能实现,...

    appium-ios-device-自动化-手机自动化-移动端IOS自动化-自动化测试-ios真机驱动

    对于 iOS,它使用 Xcode 的 Instruments 或 WebDriverAgent(Facebook 开发的代理)来驱动 UIAutomation 或 UIKit,从而实现对应用的自动化控制。 **appium-ios-device 模块** “appium-ios-device”是 Appium 与 ...

    iOS自动化windows部署.pdf

    - Tidevice是阿里开源的一款iOS自动化工具,帮助开发者在Windows环境下部署iOS自动化任务。 - 官网提供了详细的安装教程和命令行工具使用说明。 - 使用Python 3.7及以上版本安装,通过命令`pip install`来安装。 - ...

    Swift-FBMemoryProfiler是一款Facebook出品并开源的帮助分析iOS内存使用情况的iOS工具

    Swift-FBMemoryProfiler是由Facebook开发并公开的一款专为iOS应用设计的内存分析工具。这款工具旨在帮助开发者深入了解和诊断他们的应用程序在运行时的内存使用状况,特别是针对内存泄漏的检测和定位,从而优化性能...

    Window平台实现IOS自动化-WDA编译

    苹果手机自动化测试 资源 网盘下载 包含Vmware、macos、 xcode、 wda源码 适合小白 希望在window平台实现苹果手机控制 按照视频教程操作可以少走弯路 想在window平台通过虚拟机实现xcode学习、开发的菜鸟

    Facebook SDK iOS

    Facebook SDK for iOS是Facebook为iOS开发者提供的一套集成工具,旨在简化在iOS应用中整合Facebook功能的过程。这个SDK包含了各种框架和资源,使得开发者能够轻松地实现用户登录、分享、通知以及更多的社交特性。 1...

    facebook-ios-sdk, 用于将iOS应用程序与Facebook平台集成.zip

    facebook-ios-sdk, 用于将iOS应用程序与Facebook平台集成 用于iOS的这个开源库允许你将Facebook集成到你的iOS应用程序中。了解有关提供示例。文档。将SDK集成到你的应用程序。访问源代码以及在 ...

    Facebook iOS App技术演化十年之路.PDF

    ### Facebook iOS App技术演化十年之路 #### 自我介绍与背景 - **2010年:** 加入Facebook,担任软件工程师,专注于移动开发领域。 - 从Facebook Phone项目开始,逐步转向iOS应用开发。 - 在Messenger iOS中负责...

    方成:手机京东,持续集成中的自动化实践

    自动化实践是持续集成不可或缺的一环,旨在减少人为操作错误,提高重复操作的一致性。在移动开发领域,特别是像手机京东这样的大型电商平台,持续集成和自动化实践尤其重要。 方成在DevOpsDays2017北京站的分享中...

    IOS FACEBOOK SDK 开发包 和自带的几个例子

    **iOS Facebook SDK 开发包与示例** Facebook SDK for iOS 是Facebook为开发者提供的工具包,它使得在iOS应用中集成Facebook功能变得简单易行。这个SDK包含了一系列的库和资源,帮助开发者实现Facebook登录、分享、...

    IOS自动化wda打包

    在iOS自动化测试领域,WebDriverAgent(WDA)是一种广泛使用的工具,它基于Appium,并提供了对iOS设备的原生UI自动化支持。WDA允许开发者通过HTTP接口与设备进行交互,执行点击、滑动、输入文本等操作,进行功能测试...

    python UI自动化测试框架,包含安卓IOS两种

    1.该自动化框架包含安卓及ios UI自动化测试框架 2.功能包含:判断元素是否存在、点击操作、文本输入、滑动操作、截图功能、长按元素、RGB颜色提取、adb操作功能、断言功能 3.使用yaml文件编写测试用例,实现数据、...

    iOS 仿facebook 人人客户端界面 侧滑菜单

    在iOS应用开发中,创建一个类似Facebook或人人客户端的用户界面是一项常见的需求,尤其是在构建社交应用时。这个项目是关于如何在iOS应用中实现一个功能丰富的侧滑菜单,该菜单可以从屏幕左侧滑出,提供导航选项和...

    Facebook SDK iOS.zip

    Facebook SDK for iOS是Facebook官方为开发者在iOS平台上集成Facebook功能而设计的一套开发工具包。这个SDK使得开发者能够轻松地将Facebook登录、分享、社交图谱等功能整合到自己的iOS应用中,极大地提升了用户体验...

    iOS APP版本自动升级

    实现iOSAPP版本自动更新升级非常好用的一个方法 1.将文件下载解压放到项目中 2.在AppDelegate.m中applicationDidBecomeActive(APP启动后)方法中加入[[LGCheckVersion shareCheckVersion] checkVersion];即可

    适用于iOS的照片库, 与Facebook照片浏览器类似的功能.zip

    EBPhotoPages可能会采用ARC(Automatic Reference Counting)来自动管理内存,防止内存泄漏,并在适当的时候释放不再使用的资源。 8. **响应式布局**:为了适应不同屏幕尺寸和设备方向的变化,EBPhotoPages可能实现...

    Beginning.iOS.Apps.with.Facebook.and.Twitter.APIs

    这包括了用于自动化测试、性能分析、代码优化等方面的工具。 #### 第11章:可以(和不可以)构建的应用 本章将提供一些具体的案例研究,展示如何利用Facebook和Twitter API来构建具有创新性的iOS应用。同时,也会...

Global site tag (gtag.js) - Google Analytics