codingPanda
codingPanda

Reputation: 255

How to fix memory leak for UIActivityViewController presented in a UIPopoverController

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

Answers (1)

Buntylm
Buntylm

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

Related Questions