【发布时间】:2012-11-18 18:00:51
【问题描述】:
我正在尝试使用新的 iOS6 UIActivityViewController,它工作正常,除了内存泄漏工具说每次我尝试显示控制器时 NSArray *excludedActivities 都会泄漏。
请注意,我尝试使用名为 excludeActivities 的 NSArray,然后将 shareShareController.excludedActivityTypes 设置为以后能够将数组设置为 nil(所有代码都在下面注释)但现在我直接设置属性并且仍然存在是泄漏。
- (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];
}
【问题讨论】:
-
我还看到我在自己的代码中分配给excludedActivityTypes 的数组泄漏。我什至不使用completionHandler,所以这不是问题。我使用的是 iOS 6.0.1。
-
哼有趣。在将数组分配给
execludedActivityTypes属性后,您是否尝试将数组设置为nil?我试过了,还是漏水。 -
我没有数组,我正在这样做:
activityViewController.excludedActivityTypes = @[UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll];。如果我将数组分配给临时变量而不是excludedActivityTypes,则不会发生泄漏(正如我所期望的那样!)并不是说它应该有任何区别,我没有使用 ARC。 -
我明白了。在我的情况下,我使用的是 ARC 并且天气泄漏,我使用临时数组,然后将其设置为 nil 或根本不使用数组。问题是 UIViewActivityController 是新的,没有示例代码或在线帮助。
标签: ios memory-leaks nsarray uiactivityviewcontroller