我已经隔离了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数组运行代码,我仍然会得到内存泄漏。如果不包括排除项的任何一种方法,就不会发生内存泄漏。所以我想我已经把它隔离到这个数组中了。
我是不是做错了什么?这会不会是苹果代码中的一个bug?
发布于 2013-06-06 01:58:14
几乎可以肯定的是,你的UIActivityViewController不会被重新分配,但它总是有可能(尽管)苹果在这里有一个漏洞。
有两个想法:
1)子类UIActivityViewController在您使用文件中,创建一个简单的子类,它只是在dealloc例程中记录一些内容。确保这实际上是首先取消分配的。
2)如果是,则在dealloc中将excludedItems属性设置为nil,并查看泄漏是否发生更改。
@interface MyUIActivityViewController : UIActivityViewController
@end
@implementation MyUIActivityViewController
- (void)dealloc
{
NSLog(@"@ MyUIActivityViewController dealloc");
//self.excludedActivityTypes = nil;
}
@endhttps://stackoverflow.com/questions/16946517
复制相似问题