iOS Google Analytics内存越来越失控FAST

前端之家收集整理的这篇文章主要介绍了iOS Google Analytics内存越来越失控FAST前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在几个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]];

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

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

解决方法

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

来自Google的Getting Started文档

If your app uses the CoreData framework: responding to a notification,
e.g. NSManagedObjectContextDidSaveNotification,from the Google
Analytics CoreData object may result in an exception. Instead,Apple
recommends filtering CoreData notifications by specifying the managed
object context as a parameter to your listener.

这意味着……

// 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];

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

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

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

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

猜你在找的iOS相关文章