我已将内存泄漏隔离到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代码中的错误吗?
答案 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