【问题标题】:How to fix memory leak for UIActivityViewController presented in a UIPopoverController如何修复 UIPopoverController 中呈现的 UIActivityViewController 的内存泄漏
【发布时间】:2013-05-15 09:22:23
【问题描述】:

类似于this postthis one 我正在为我的应用程序中的共享选项创建一个 UIActivityViewController(ARC 已激活)。它是一个通用应用程序,因此我以模态方式为 iPhone/iPod 展示 UIActivityViewController,并在 iPad 的弹出框内展示。 在分析我的应用程序时 Instruments 检测到我的函数中的 NSArray 内存泄漏,用于创建 UIActivityViewController:

MyActivityItemProvider *activityItemProvider = [[MyActivityItemProvider alloc] init];//custom activity item provider
NSArray *items= [NSArray arrayWithObjects:activityItemProvider, nil];
UIActivityViewController *activity = [[UIActivityViewController alloc]
                                               initWithActivityItems:items
                                               applicationActivities:nil];

[activity setExcludedActivityTypes:[NSArray arrayWithObjects:UIActivityTypeAssignToContact,UIActivityTypePrint,UIActivityTypeSaveToCameraRoll,UIActivityTypePostToWeibo, UIActivityTypeMessage,nil]];

使用上述帖子中的答案(__block 和完成来销毁排除的活动项的数组),我设法修复了 iPhone 的泄漏,因为函数 presentViewController 确实提供了完成处理程序。

如何将 UIActivityController 和 excludeActivityTypes 设置为 nil 以防在弹出窗口中显示它? 我发现 UIActivityViewController 提供了一个 completionHandler 属性,但我不知道如何在不创建循环的情况下使用它...

提前致谢!

【问题讨论】:

  • __block UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil]; activityController.excludedActivityTypes = [NSArray arrayWithObjects:@"a",@"b", nil]; [self presentViewController:activityController animated:YES completion:^{ activityController.excludedActivityTypes=nil; activityController=nil;}];
  • 我这样做是为了在 iPhone 上展示 UIActivityViewController,但对于 iPad,我展示的是: - (void)presentPopoverFromBarButtonItem:(UIBarButtonItem *)item allowedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL )动画...我该怎么做呢?
  • 这对 iphone 有帮助吗?看看这个stackoverflow.com/questions/13442910/…
  • 是的,确实有帮助(就像我在我的 OP 中所说的那样 :))问题是:如何通过弹出框实现相同的效果?

标签: ios ipad memory-leaks uipopovercontroller uiactivityviewcontroller


【解决方案1】:

根据您的要求尝试此代码

__block UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil]; 
activityController.excludedActivityTypes = [NSArray arrayWithObjects:@"a",@"b", nil]; 
[self presentViewController:activityController animated:YES completion:^{ activityController.excludedActivityTypes=nil; activityController=nil;}];

【讨论】:

  • 抱歉,不能接受,因为这没有回答我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多