FBAllocationTracker 0.1.5

FBAllocationTracker 0.1.5

测试已测试
语言语言 Objective C++Objective C++
许可 BSD
发布上次发布2016年5月

Dave LeeGrzegorz PstruchaJeremie Marguerie 维护。



  • 作者:
  • Grzegorz Pstrucha

一个用于内省当前内存中存在的 Objective-C 对象的 iOS 库。

关于

FBAllocationTracker 是一个可以将 objective-C 在内存中分配的对象作为接口使用的工具。它可以用来查询给定类所有实例,或者您可以通过 Instruments 中那样标记代数并查询仅在一代范围内创建的对象。

安装

使用

FBAllocationTracker 可以运行在两种模式:跟踪对象,仅计数分配/释放。第一种模式更有趣,我们会立即进入。第二种模式在您不想影响性能时可以用于某些统计信息。

首先,我们想在运行时启用 FBAllocationTracker。我们可以在任何时候这样做。例如在 main.m 中!

#import <FBAllocationTracker/FBAllocationTrackerManager.h>

int main(int argc, char * argv[]) {
  [[FBAllocationTrackerManager sharedManager] startTrackingAllocations];
  [[FBAllocationTrackerManager sharedManager] enableGenerations];
  @autoreleasepool {
      return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
  }
}

在上面的代码中,startTrackingAllocations 将负责篡改 NSObject 的 +alloc-dealloc 方法,而 enableGenerations 将开始跟踪对象的实际 实例

我们可以抓住所有类分配的摘要

NSArray<FBAllocationTrackerSummary *> *summaries = [[FBAllocationTrackerManager sharedManager] currentAllocationSummary];

FBAllocationTrackerSummary 会告诉你,对于给定的类,有多少该类的实例仍然存在。

启用代数后(下文将详细介绍),您也可以获取给定类中所有的实例

NSArray *instances =[[FBAllocationTrackerManager sharedManager] instancesOfClasses:@[[ViewController class]]];

查看 FBAllocationTrackerManager API,了解您还可以做什么。

代数

代数是受到 Instruments 中 Allocations 工具启发的想法。启用代数后,我们可以通过调用 [[FBAllocationTrackerManager sharedManager] markGeneration] 来标记代数。给定 markGeneration 调用之后分配的所有对象都将保留在新一代中。我们可以在一个非常简单的示例中看到这一点

- (void)someFunction {
  // Enable generations (if not already enabled in main.m)
  [[FBAllocationTrackerManager sharedManager] enableGenerations];

  // Object a will be kept in generation with index 0
  NSObject *a = [NSObject new];

  // We are marking new generation
  [[FBAllocationTrackerManager sharedManager] markGeneration];

  // Objects b and c will be kept in second generation at index 1
  NSObject *b = [NSObject new];
  NSObject *c = [NSObject new];

  [[FBAllocationTrackerManager sharedManager] markGeneration];

  // Object d will be kept in third generation at index 2
  NSObject *d = [NSObject new];
}

FBAllocationTrackerManager 有 API 可以获取给定类在给定代中的所有实例。

NSArray *instances =[[FBAllocationTrackerManager sharedManager] instancesForClass:[NSObject class]
                                                                     inGeneration:1];

这可以用来分析分配,例如通过执行用户可能执行的一些常见任务。在每次任务之间,我们可以标记一个新的代数,然后验证给定的代中有哪些对象被保留。

其他用例

FBAllocationTrackerFBMemoryProfiler 中得到广泛使用。它为 FBMemoryProfiler 提供数据。它也是为 FBRetainCycleDetector 候选人提供重要来源。

贡献

有关如何协助的说明,请参阅 CONTRIBUTING 文件。

许可证

FBAllocationTracker 采用 BSD 许可协议。我们还提供额外的 专利许可