Reputation: 255
Similar to this post and this one I'm creating a UIActivityViewController for the sharing option in my app (ARC activated). It's a universal app, so I'm presenting the UIActivityViewController modally for iPhone/iPod and inside a popover for iPad. While profiling my app Instruments detected memory leaks for an NSArray inside my function for creating the 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]];
Using the answer (__block and completion to destroy array for the excluded activity items) from the posts mentioned above, I managed to fix the leak for iPhone since the function presentViewController does provide a completion handler.
How can I set the UIActivityController and it's excludedActivityTypes to nil in case of presenting it in a popover? I found that UIActivityViewController provides a completionHandler property, but I can't wrap my head around how to use it without creating a cycle...
Thanks in advance!
Upvotes: 1
Views: 1164
Reputation: 7373
As On Your Requirement try this code
__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;}];
Upvotes: 1