2013-07-31 4 views
0

Я только что обнаружил утечку памяти в своем приложении, но я не уверен, как это сделать. Он включает представление активности, которое используется для совместного использования URL-адреса текущей статьи, просматриваемой из RSS-ленты. Я не совсем уверен, почему происходит утечка. Любые идеи или советы? iPhone Leak iPad LeakiOS Memory Leak с видом активности

Указанный способ для версии 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]; 
} 

EDIT: Я установил утечку 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 по сути одна и та же, за исключением того, что она использует popover для отображения вида активности.

- (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]; 
    } 

} 
+0

Вы используете ARC? – Alexander

+0

Да, я использую ARC. – raginggoat

+1

, если вы нашли ответ на свой вопрос, добавьте его в качестве правильного ответа ниже и примите его. – sergio

ответ

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.

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]; 
    } 

Надеюсь, он решит вашу проблему.

+0

Это не устранило утечку. – raginggoat