iOS Google Analytics内存越来越失控FAST

DBD*_*DBD 6 memory containers google-analytics ios

我在几个iOS应用上使用了Google Analytics.没问题.这一次,问题.

我使用3.0版进行基本设置.添加库/标题,包括必需的框架,并将锅炉板代码填入AppDelegate.m.到目前为止一切顺利,一切都按预期工作.我拿第一个UIViewController并改变它以扩展GAITrackedViewController并击中风扇.该应用程序在第一个屏幕上冻结,内存使用量开始上升到每秒4Meg左右.所以我改变了UIViewController背部,一切都很好.我尝试手动进行屏幕名称调用viewDidLoad.

// Analytics
id tracker = [[GAI sharedInstance] defaultTracker];
[tracker set:kGAIScreenName value:@"Initial"];
[tracker send:[[GAIDictionaryBuilder createAppView] build]];
Run Code Online (Sandbox Code Playgroud)

同样的事情发生了 我的视图控制器有一些自定义容器视图,它是泛型的根视图控制器UINavigationViewController.我想这可能是自定义容器混淆了哪个是活动视图控制器和使用什么屏幕名称(但我没有在日志中看到任何这种迹象).

有没有人遇到这个问题,并能够准确确定导致它的原因以及如何解决它?

DBD*_*DBD 5

João的回答是正确的,但我想解释一下.

来自Google的" 入门"文档

如果您的应用使用CoreData框架:从Google Analytics CoreData对象响应通知(例如NSManagedObjectContextDidSaveNotification)可能会导致异常.相反,Apple建议通过将托管对象上下文指定为侦听器的参数来过滤CoreData通知.

这意味着......

// This code will cause a problem because it gets triggered on ANY NSManagedObjectContextDidSaveNotification.
// (both your managed object contact and the one used by Google Analytics)
[[NSNotificationCenter defaultCenter] addObserver:self 
                                      selector:@selector(managedObjectContextDidSave:) 
                                      name:NSManagedObjectContextDidSaveNotification 
                                      object:nil];

// This code is safe and will only be trigger from the notification generated by your Managed Object Context.
[[NSNotificationCenter defaultCenter] addObserver:self 
                                      selector:@selector(managedObjectContextDidSave:) 
                                      name:NSManagedObjectContextDidSaveNotification 
                                      object:myManagedObjectContext];
Run Code Online (Sandbox Code Playgroud)

现在我阅读了文档并且我已经正确地完成了这个,但我仍然遇到了问题.事实证明,当我删除通知时,我没有更新我的代码.

// Not Safe
[[NSNotificationCenter defaultCenter] removeObserver:self
                                                name:NSManagedObjectContextDidSaveNotification 
                                              object:nil];

// Safe
[[NSNotificationCenter defaultCenter] removeObserver:self 
                                                name:NSManagedObjectContextDidSaveNotification 
                                              object:myManagedObjectContext];
Run Code Online (Sandbox Code Playgroud)

故事的寓意是,注意你的通知听众.指定特定对象的侦听器需要几秒钟,并且可能需要很长时间才能调试问题,因为您不小心听取了您不想要的事件或删除了对事件的侦听.