Google Analytics(分析)发送内存时内存泄漏

时间:2015-04-20 11:09:21

标签: ios memory-leaks google-analytics google-analytics-sdk

我正在尝试使用Google Analytics SDK v3.10 for iOS。

我添加了所有依赖项和标题,然后在我的app delegate中添加了方法:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

,我添加了这些内容:

[[GAI sharedInstance] setDispatchInterval:20.0];
[[GAI sharedInstance] trackerWithTrackingId:@"UA-XXXXXXXX-X"];
[[GAI sharedInstance].logger setLogLevel:kGAILogLevelVerbose];

使用正确的跟踪ID。

在我的着陆视图中,方法viewDidAppear,我添加了行

id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
[tracker set:kGAIScreenName value:@"MyLandingView"];
[tracker send:[[GAIDictionaryBuilder createAppView] build]];

导致可怕的内存泄漏(约+ 1mb / s)并冻结这些日志:

Apr 20 08:07:47 iPad-of-Pitt MyAppName[920] <Warning>: void SendDelegateMessage(NSInvocation *): delegate (webView:decidePolicyForNavigationAction:request:frame:decisionListener:) failed to return after waiting 10 seconds. main run loop mode: kCFRunLoopDefaultMode

这是一个已知的错误吗?关于如何避免这种情况的任何线索?

提前致谢!

编辑:在Google群组https://groups.google.com/forum/?fromgroups#!topic/ga-mobile-app-analytics/0goRZOc3vk0

中重复此问题

编辑2:此处也发布了问题https://code.google.com/p/analytics-issues/issues/detail?id=617&thanks=617&ts=1429543879

2 个答案:

答案 0 :(得分:3)

我有同样的问题。

在我的情况下,因为我使用Core Data和NSManagedObjectContextDidSaveNotification来合并后台进程的更新,导致this post中描述的异常:

我使用的解决方案是将managedObjectContext本身添加为NSNotificaition声明的对象:

ObjC

[[NSNotificationCenter defaultCenter] addObserver:self 
                                  selector:@selector(managedObjectContextDidSave:) 
                                  name:NSManagedObjectContextDidSaveNotification 
                                  object:self.managedObjectContext];

夫特

NSNotificationCenter.defaultCenter().addObserverForName(NSManagedObjectContextDidSaveNotification,
            object: self.managedObjectContext,
            queue: nil)

对我而言,没有更多的内存泄漏。

希望它可以提供帮助。

答案 1 :(得分:-1)

一旦事件被触发,将需要几分钟才能反映在仪表板中。预计用户应该没有耐心。这是看待它的一种方式。

关于代码,最好手动调度事件。 IT肯定会反映在仪表板中。

id newTracker = [[GAI sharedInstance]trackerWithTrackingId:googlePropertyId];
[GAI sharedInstance].defaultTracker = newTracker; // Set newTracker as the default tracker globally.
[GAI sharedInstance].debug = YES;
DebugLog(@"Events log : %@",objAnalytics.event_description);
[newTracker trackEventWithCategory:objAnalytics.event_name
                            withAction:objAnalytics.event_description
                             withLabel:objAnalytics.event_name
                             withValue:[NSNumber numberWithInt:100]];

请尝试手动调度事件。这肯定会起作用(至少它对我有用)。

[[GAI sharedInstance]dispatch];