RestKit:setBaseURL 导致内存泄漏

Posted

技术标签:

【中文标题】RestKit:setBaseURL 导致内存泄漏【英文标题】:RestKit: setBaseURL causes memory leaks 【发布时间】:2011-12-24 14:34:26 【问题描述】:

我正在尝试使用 RestKit 从网络获取一些信息。 这是我的代码:

(void)getTestData:(NSString *)baseURL

    [[RKClient sharedClient] setBaseURL:baseURL];
    [[RKClient sharedClient] get:@"/TestData" delegate:self];

但我发现当我使用“setBaseURL”时,内存泄漏。

我能做些什么来解决这个问题?

【问题讨论】:

如果我注释 setBaseURL 行,则没有内存泄漏。所以我怀疑 setBaseURL 方法是否会导致内存泄漏。在我的应用程序中,我需要使用不同的 URL...谢谢您的帮助! 【参考方案1】:

也许您可以在初始化应用程序时使用 clientWithBaseURL 方法:

RKClient *client = [RKClient clientWithBaseURL:@"http://restkit.org"];

但如果您需要使用多个 URL,这将无济于事。

如果您只使用一个 URL,请不要将 URL 设置为用于 GET/POST... 数据的所有方法,而应仅在带有 clientWithBaseURL 的应用程序初始化中。

希望对你有帮助。

【讨论】:

感谢您的帮助!我在初始化我的应用程序时使用了 clientWithBaseURL 方法。但在我的应用程序中,我需要使用不同的 URL。所以我对这个问题感到困惑。有没有更好的方法?再次感谢您! 尝试使用“Instrument”查看witch对象导致的内存泄漏。当你调用metod时你能告诉我们你的代码吗: -(void)getTestData:(NSString *)baseURL; ? 另一种解决方案,使用 clientWithBaseURL 创建新的 RKClient 实例,并在使用 setSharedClient 方法替换 RKClient 的当前共享实例后,thix 方法释放以前的实例。 我通过在RKReachabilityObserver.m文件的initWithHostName方法中添加_hostName属性的释放解决了这个问题。我不确定它是否正确,但现在确实没有泄漏。谢谢!

以上是关于RestKit:setBaseURL 导致内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章

LeakCanary检测内存泄漏

常见的内存泄漏原因及解决方法

安卓内存分析——常见内存泄漏场景二

Android内存泄漏

static关键字所导致的内存泄漏问题

为啥 pthread 会导致内存泄漏