0

アプリでメモリ リークを発見しましたが、修正方法がよくわかりません。これには、RSS フィードから表示されている現在の記事の URL を共有するために使用されるアクティビティ ビューが含まれます。なぜ漏れが起こっているのかよくわかりません。アイデアやアドバイスはありますか?iPhoneリーク iPadリーク

問題の iPhone 版のメソッドは次のとおりです。

- (void) showMenu
{   
    NSURL *urlToShare = hackyURL;
    NSArray *activityItems = @[urlToShare];
    TUSafariActivity *activity = [[TUSafariActivity alloc] init];

    UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:@[activity]];
    activityVC.excludedActivityTypes = @[UIActivityTypeAssignToContact, UIActivityTypePostToWeibo, UIActivityTypeSaveToCameraRoll];

    [self presentViewController:activityVC animated:TRUE completion:nil];
}

編集: 上記のコードを次のように変更して、iPhone リークを修正しました。

__block UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:@[activity]];
    activityVC.excludedActivityTypes = @[UIActivityTypeAssignToContact, UIActivityTypePostToWeibo, UIActivityTypeSaveToCameraRoll];

    [self presentViewController:activityVC animated:YES completion:^{activityVC.excludedActivityTypes = nil; activityVC = nil;}];

iPad バージョンは、ポップオーバーを使用してアクティビティ ビューを表示することを除いて、基本的に同じです。

- (void)showMenu
{    
    NSURL *urlToShare = hackyURL;
    NSArray *activityItems = @[urlToShare];
    TUSafariActivity *activity = [[TUSafariActivity alloc] init];

    UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:@[activity]];
    activityVC.excludedActivityTypes = @[UIActivityTypeAssignToContact, UIActivityTypePostToWeibo, UIActivityTypeSaveToCameraRoll];

    if ([popover isPopoverVisible])
    {
        [popover dismissPopoverAnimated:YES];
        popover = nil;
    }
    else
    {
        self.popover = [[UIPopoverController alloc]initWithContentViewController:activityVC];
        [self.popover presentPopoverFromBarButtonItem:systemAction permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    }

}
4

2 に答える 2

0

上記のコードを次のように変更して、iPhone リークを修正しました。

__block UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:@[activity]];
    activityVC.excludedActivityTypes = @[UIActivityTypeAssignToContact, UIActivityTypePostToWeibo, UIActivityTypeSaveToCameraRoll];

    [self presentViewController:activityVC animated:YES completion:^{activityVC.excludedActivityTypes = nil; activityVC = nil;}];

しかし、iPad のポップオーバーのリークを修正する方法がわかりません。

于 2013-07-31T20:29:18.520 に答える
0
 if ([self.popover isPopoverVisible])
    {
        [self.popover dismissPopoverAnimated:YES];
        self.popover = nil;
    }
    else
    {
        self.popover = [[UIPopoverController alloc]initWithContentViewController:activityVC];
        [self.popover presentPopoverFromBarButtonItem:systemAction permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    }

問題が解決することを願っています。

于 2013-07-31T20:38:40.037 に答える