NSArray * excludedActivities即使使用ARC并将其设置为零,也会泄漏内存

我试图使用新的iOS6 UIActivityViewController,它工作正常,但内存泄漏仪器说,NSArray * execludedActivities每次我试图显示控制器泄漏。

请注意,我试图使用一个名为excludedActivities的NSArray,然后设置shareShareController.excludedActivityTypes,以便能够将该数组设置为零(以下所有评论代码),但现在我直接设置属性,仍然有泄漏。

- (IBAction)share:(id)sender { //prepare the image UIImage *theImage = [self screenShot]; //The array of activity Items NSArray *activityItems = [[NSArray alloc] initWithObjects:theImage, nil]; //The acitivyViewController UIActivityViewController *shareController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil]; //Excluded Actvivity Types //NSArray *excludedAcitivities = [[NSArray alloc] initWithObjects:UIActivityTypeAssignToContact,UIActivityTypeCopyToPasteboard,UIActivityTypePostToWeibo, UIActivityTypePrint, nil]; shareController.excludedActivityTypes = [[NSArray alloc] initWithObjects:UIActivityTypeAssignToContact,UIActivityTypeCopyToPasteboard,UIActivityTypePostToWeibo, UIActivityTypePrint, nil]; //testing fixning the leak of NSArray //excludedAcitivities = nil; //set the completion handler [shareController setCompletionHandler:^(NSString *activityType, BOOL completed) { //test hiding the By MunasabaPro lable int shareScreen = pageControl.currentPage; MainViewController *someController = [viewControllers objectAtIndex:shareScreen]; someController.byLabel.hidden = YES; }]; [self presentViewController:shareController animated:YES completion:nil]; } 

在这里输入图像说明

我认为你的完成处理程序有一个保留周期。 看看这个问题 。

 __weak id blockShareController = shareController; [shareController setCompletionHandler:^(NSString *activityType, BOOL completed) { //test hiding the By MunasabaPro lable int shareScreen = pageControl.currentPage; blockShareController.byLabel.hidden = YES; }]; 

/ /试试这个,这应该解决问题(至less对于我的情况)

NSArray * activityItems = [NSArray arrayWithObjects:textToShare,imageToShare,nil];

__block UIActivityViewController * activityVC = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];

activityVC.excludedActivityTypes = @ [UIActivityTypePrint,UIActivityTypeAssignToContact];

[self presentViewController:activityVC animated:YES completion:^ {activityVC.excludedActivityTypes = nil; activityVC = nil; }];