【问题标题】:TWTweetComposeViewController memory leak with ARC enabled启用 ARC 的 TWTweetComposeViewController 内存泄漏
【发布时间】:2011-11-26 19:48:13
【问题描述】:

尽管在该文件上启用了 ARC,但我有以下代码导致泄漏:

TWTweetComposeViewController *tweetViewController = [[TWTweetComposeViewController alloc] init];

[tweetViewController setInitialText:[self facebookAndTwitterStatus]];

tweetViewController.completionHandler = ^(TWTweetComposeViewControllerResult result) {
    if(result == TWTweetComposeViewControllerResultDone) {
        // the user finished composing a tweet
    } else if(result == TWTweetComposeViewControllerResultCancelled) {
        // the user cancelled composing a tweet
    }
    [self dismissViewControllerAnimated:YES completion:nil];
};

[self presentViewController:tweetViewController animated:YES completion:nil];

[self hideSettingsPopover];

显然我没有发布,但我怎样才能摆脱这个泄漏?

【问题讨论】:

  • 我不知道为什么我被否决了。这是一个真正的问题,Apple 的方法会导致泄漏。然而之前没有人问过这个问题吗?
  • 你怎么知道你有泄漏?
  • 如果您要让我们调试您的代码,而没有表现出任何努力或尝试自己解决这个问题,您可以做的最起码就是告诉我们a) 泄漏在哪里,以及 b) 你是如何发现它的。
  • 代码不会泄露——对象会泄露。那么什么对象应该泄漏?
  • 用苹果提出一个错误。他们确实听。只需提供一个显示问题的示例项目。

标签: iphone objective-c


【解决方案1】:

在你的 TwTweetViewController 变量 tweetViewController 上使用 __block 并在您的完成处理程序中将 tweetViewController 设置为 nil。

**__block** TweetComposeViewController *tweetViewController = [[TWTweetComposeViewController alloc] init];

[tweetViewController setInitialText:[self facebookAndTwitterStatus]];

tweetViewController.completionHandler = ^(TWTweetComposeViewControllerResult result) {
    if(result == TWTweetComposeViewControllerResultDone) {
        // the user finished composing a tweet
    } else if(result == TWTweetComposeViewControllerResultCancelled) {
        // the user cancelled composing a tweet
    }
    [self dismissViewControllerAnimated:YES completion:nil];
    **tweetViewController = nil;**
};

__block 复制您的 tweetViewController,并在您将其设置为 nil 时将其释放。 这在过渡到 ARC 发行说明中进行了解释。 http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/_index.html

不确定您的问题为何被否决。

【讨论】:

    猜你喜欢
    • 2012-02-25
    • 2012-04-03
    • 1970-01-01
    • 2012-09-14
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-28
    相关资源
    最近更新 更多