1

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

提前致谢!

4

1 回答 1

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;}];
于 2013-05-15T09:51:54.327 回答