我已经隔离了 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];
}
如果我使用声明或暗示的 exceptedItems 数组运行代码,我仍然会遇到内存泄漏。如果我不包括任何一种排除项目的方式,我就不会出现内存泄漏。所以我想我已经将它隔离到这个数组中。
我是不是做错了什么?这可能是 Apple 代码中的错误吗?
最佳答案
几乎可以肯定,您的 UIActivityViewController 不会被重新分配,但 Apple 始终有可能(尽管)在这里发生泄漏。
两个想法:
1) 在您使用的文件中使用 UIActivityViewController 子类,创建一个简单的子类,仅在 dealloc 例程中记录一些内容。确保实际上这是首先被释放的。
2) 如果是这样,则在 dealloc 中将 exceptedItems 属性设置为 nil,并查看泄漏是否发生变化。
@interface MyUIActivityViewController : UIActivityViewController
@end
@implementation MyUIActivityViewController
- (void)dealloc
{
NSLog(@"@ MyUIActivityViewController dealloc");
//self.excludedActivityTypes = nil;
}
@end
关于ios - UIActivityController 中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16946517/