1

この投稿これと同様に、アプリの共有オプション用に UIActivityViewController を作成しています (ARC が有効化されています)。これはユニバーサル アプリなので、iPhone/iPod では UIActivityViewController をモーダルに、iPad ではポップオーバー内に表示しています。アプリのプロファイリング中に、Instruments は、UIActivityViewController を作成する関数内で NSArray のメモリ リークを検出しました。

MyActivityItemProvider *activityItemProvider = [[MyActivityItemProvider alloc] init];//custom activity item provider
NSArray *items= [NSArray arrayWithObjects:activityItemProvider, nil];
UIActivityViewController *activity = [[UIActivityViewController alloc]
                                               initWithActivityItems:items
                                               applicationActivities:nil];

[activity setExcludedActivityTypes:[NSArray arrayWithObjects:UIActivityTypeAssignToContact,UIActivityTypePrint,UIActivityTypeSaveToCameraRoll,UIActivityTypePostToWeibo, UIActivityTypeMessage,nil]];

上記の投稿からの回答 (__block と、除外されたアクティビティ項目の配列を破棄するための完了) を使用して、関数 presentViewController が完了ハンドラーを提供するため、iPhone のリークを修正することができました。

ポップオーバーで表示する場合、UIActivityController を設定し、excludedActivityTypes を nil に設定するにはどうすればよいですか? UIActivityViewController が completionHandler プロパティを提供していることがわかりましたが、サイクルを作成せずにそれを使用する方法について頭を悩ませることはできません...

前もって感謝します!

4

1 に答える 1

1

あなたの要件に応じて、このコードを試してください

__block UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil]; 
activityController.excludedActivityTypes = [NSArray arrayWithObjects:@"a",@"b", nil]; 
[self presentViewController:activityController animated:YES completion:^{ activityController.excludedActivityTypes=nil; activityController=nil;}];
于 2013-05-15T09:51:54.327 に答える