【问题标题】:There is a memory leak when sharing file URL using UIActivityViewController使用 UIActivityViewController 共享文件 URL 时存在内存泄漏
【发布时间】:2018-05-30 09:06:11
【问题描述】:

我写过这样的代码,当我使用仪器时,我发现了内存泄漏。

            NSURL *filePath = [NSURL fileURLWithPath:path];
            UIActivityViewController *vc = [[UIActivityViewController alloc] initWithActivityItems:@[filePath] applicationActivities:nil];
            [self presentViewController:vc animated:YES completion:nil];

仪器泄漏显示

然后,我尝试共享一个 NSString 或 NSURL(不是文件 url)。没有内存泄漏。 那么如何共享一个没有内存泄漏的文件 URL 呢?

            NSURL *path = [NSURL URLWithString:@"https://stackoverflow.com/"];
            UIActivityViewController *vc = [[UIActivityViewController alloc] initWithActivityItems:@[path] applicationActivities:nil];
            [self presentViewController:vc animated:YES completion:nil];

【问题讨论】:

    标签: ios objective-c xcode


    【解决方案1】:

    根据我对 Xcode 分配堆栈的调查,每次我为文件 url 提供 UIActivityViewController 时,它都会泄漏大约 20-50 个包含文件统一标识符的 CFString 对象。例如,当我传递一个 mp3 文件时,它包含 "public.mp3"

    我认为创建这些是为了检查哪些已安装的应用程序可以打开文件,哪些不能。

    你应该提交一个错误报告以便让 Apple 修复它

    【讨论】:

      【解决方案2】:

      你可以试试这个吗?

      NSURL *filePath = [NSURL fileURLWithPath:path];
      UIActivityViewController *vc = [[UIActivityViewController alloc] initWithActivityItems:@[filePath] applicationActivities:nil];
      [self presentViewController:vc animated:YES completion:^
      { 
          vc=nil;
      }];
      [vc release];
      

      【讨论】:

      • 我试过这个。但是对方手机收到的不是普通文件,收到的是“3F533F3F3F.data”这种后缀为“.data”的文件
      • 您的文件类型是什么?是静态的还是动态的?
      • 静态的。例如 .txt、.pdf 等。我只是想将我的应用程序中的文件分享给其他 iPhone/iMac。
      • 更新后的答案和我现在用的一样。它很有用,但存在内存泄漏。还有一个问题@"Name"ininitWithActivityItems:@[@"Name", url]写错了吗?
      • 这是我最后的建议伙伴,如果它不能解决你的问题,我已经完成了:/
      猜你喜欢
      • 2011-08-27
      • 2014-08-13
      • 2017-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-31
      • 2013-08-25
      • 2012-09-19
      相关资源
      最近更新 更多