UIActivityController中的内存泄漏

时间:2013-06-05 17:45:33

标签: ios uiactivityviewcontroller

我已将内存泄漏隔离到setExcludedActivityTypes数组。请参阅以下代码:

- (void)postToFacebook:(UITapGestureRecognizer *)sender
{
    NSString *postText = socialString;
    UIImage *imageToPost = [self captureTheScreenImage];
    NSArray *postItems = @[postText, imageToPost];

    UIActivityViewController *activityPostVC = [[UIActivityViewController alloc]initWithActivityItems:postItems applicationActivities:nil];


    //NSArray *excludedItems = @[UIActivityTypePostToWeibo,UIActivityTypePrint,UIActivityTypeCopyToPasteboard,UIActivityTypeAssignToContact,UIActivityTypeSaveToCameraRoll, UIActivityTypeMail, UIActivityTypeMessage];

    //[activityPostVC setExcludedActivityTypes:excludedItems];

    [activityPostVC setExcludedActivityTypes:@[UIActivityTypePrint,UIActivityTypeCopyToPasteboard,UIActivityTypeAssignToContact,UIActivityTypeSaveToCameraRoll, UIActivityTypeMail, UIActivityTypeMessage]];

    [self presentViewController:activityPostVC animated:YES completion:nil];

}

如果我使用声明或隐含的excludedItems数组运行代码,我仍会得到内存泄漏。如果我不包括任何排除项目的方式,我不会得到内存泄漏。所以我想我已经将它隔离到了这个数组。

我做错了吗?这可能是Apple代码中的错误吗?

1 个答案:

答案 0 :(得分:1)

几乎可以肯定你的UIActivityViewController没有被重新分配,但它总是可能(尽管)不太可能在这里发生泄漏。

两个想法:

1)在你使用它的文件中使用UIActivityViewController,创建一个简单的子类,只需在dealloc例程中记录一些东西。确保事实上这首先得到了dealloc'd。

2)如果是这样,在dealloc中将excludedItems属性设置为nil,并查看泄漏是否发生变化。

@interface MyUIActivityViewController : UIActivityViewController
@end

@implementation MyUIActivityViewController
- (void)dealloc
{
    NSLog(@"@ MyUIActivityViewController dealloc");

    //self.excludedActivityTypes = nil;
}
@end