版本记录
版本号 | 时间 |
---|---|
V1.0 | 2017.09.26 |
前言
在APP中,内存是极其宝贵的资源,因此需要我们很好的管理内存的使用,下面介绍一个用于检测目前存活对象的框架,这里先给出 Github - FBAllocationTracker。
关于
用于检测目前活着的Objective-C
对象的iOS库。
FBAllocationTracker
是一种可以用作内存中分配的Objective-C对象的接口的工具。 它可以用于查询给定类的所有实例,或者您可以(如在Instruments中)标记代,并查询仅在一代范围内创建的对象。
安装
1. Carthage
在Cartfile文件中加入
github "facebook/FBAllocationTracker"
然后使用
carthage update --configuration Debug
2. CocoaPods
pod 'FBAllocationTracker'
您只能在Debug
构建中完全使用FBAllocationTracker
。 这由编译标志控制,可以提供给构建以使其在其他配置中工作。
使用
FBAllocationTracker
可以运行在两种模式中:跟踪对象,并只计算allocs / deallocs
。 第一个更有趣,我们进行跳转。 当您不想影响性能时,第二个可以被视为对某些统计信息有用。
首先,我们要在我们的运行中启用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]]];
分代
代是灵感来自Instruments
中的Allocations tool
。 启用代,我们可以调用[[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];
这可以用于分析分配,例如通过执行用户可能执行的常见任务。 在每个任务之间,我们可以标记新一代,然后验证哪些对象被保留在一代中。
FBAllocationTracker
在FBMemoryProfiler
中大量使用。 它为FBMemoryProfiler
提供数据。 它也是FBRetainCycleDetector
的重要来源。
后记
未完,待续~~~