与这篇文章和这篇文章类似,我正在为我的应用程序中的共享选项创建一个 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 属性,但我无法在不创建循环的情况下解决如何使用它......
提前致谢!