如何修复UIPopoverController中提供的UIActivityViewController的内存泄漏

时间:2013-05-15 09:22:23

标签: ios ipad memory-leaks uipopovercontroller uiactivityviewcontroller

this postthis one类似,我正在为我的应用程序中的共享选项创建一个UIActivityViewController(ARC已激活)。它是一个通用的应用程序,因此我将为iPhone / iPod提供UIActivityViewController,并在iPad的popover中提供。 在分析我的app 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并将其excludedActivityTypes设置为nil?我发现UIActivityViewController提供了completionHandler属性,但我无法解决如何使用它而不创建循环...

提前致谢!

1 个答案:

答案 0 :(得分: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;}];