与this post和this 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属性,但我无法解决如何使用它而不创建循环...
提前致谢!
答案 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;}];