Утечка памяти в UIActivityController

Я изолировал утечку памяти в массиве 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];

}

Если я запускаю код с объявленным или подразумеваемым массивом excludeItems, я все равно получаю утечку памяти. Если я не включу ни один из способов исключения элементов, у меня не будет утечки памяти. Поэтому я думаю, что изолировал его в этом массиве.

Есть ли что-то, что я делаю неправильно? Может ли это быть ошибкой в ​​​​коде Apple?


person MplsRich    schedule 05.06.2013    source источник
comment
Как объявляется и реализуется excludedActivityTypes / setExcludedActivityTypes?   -  person Kevin    schedule 05.06.2013
comment
так же, как вы видите в коде - нигде, кроме NSArray *excludedItems...   -  person MplsRich    schedule 05.06.2013


Ответы (1)


Почти наверняка ваш UIActivityViewController не перераспределяется, но всегда возможно (хотя) маловероятно, что у Apple есть утечка.

Две идеи:

1) создайте подкласс UIActivityViewController в используемом вами файле, создайте тривиальный подкласс, который просто регистрирует что-то в подпрограмме Dealloc. Убедитесь, что на самом деле это освобождается первым.

2) если это так, установите для свойства excludeItems значение nil в Dealloc и посмотрите, изменится ли утечка.

@interface MyUIActivityViewController : UIActivityViewController
@end

@implementation MyUIActivityViewController
- (void)dealloc
{
    NSLog(@"@ MyUIActivityViewController dealloc");

    //self.excludedActivityTypes = nil;
}
@end
person David H    schedule 05.06.2013
comment
Дэвид - спасибо за это. Предоставленное вами решение действительно сработало, как вы упомянули. - person MplsRich; 05.06.2013
comment
@gatorNation Но была ли проблема в освобождении объекта или в том, что у Apple действительно есть ошибка? - person David H; 05.06.2013
comment
Когда я реализовал подкласс UIActivityViewController с кодом расцепления, но БЕЗ установки для параметра excludeActivityTypes значения nil, я получил сообщение о расцеплении в NSLog, но утечка все еще была. Поэтому мне пришлось реализовать self.excludedActivityTypes = nil. Можете ли вы сделать вывод из моего наблюдения, потому что я до сих пор не вижу общей картины :( - person MplsRich; 05.06.2013