我在非void实例方法中遇到另一个内存泄漏,该方法返回类NSMutableArray的对象。
有人可以告诉我如何解决这个漏洞吗?我试图在方法结束时释放'userFollowings',但它仍然报告泄漏。
答案 0 :(得分:9)
当您要从已初始化或保留它的方法返回一个对象时,通常的做法是将其返回自动释放。这样,接收对象的用户不必担心释放它。因此,您的最后一行代码应如下所示:
return [userFollowing autorelease];
从Memory Management Programming Guide读一点内容管理规则可能不会有什么坏处,而且网上和本网站上还有很多其他有用的资源。
答案 1 :(得分:3)
Cocoa程序使用a set of conventions使得内存管理更不容易出错。当一个方法返回一个对象时,调用它的代码需要知道它是否拥有它。
它归结为如果你正在编写一个返回一个对象的方法,并且该方法不会通过命名为new
,alloc
之类的方式来传达调用者的所有权, copy
等,在您返回之前,您需要autorelease
。
您收到的消息是什么 - "对象作为拥有参考返回给来电者" 表示您已经转发所有权调用代码。问题是您的方法名称另有说明。
如果我打电话给你的方法并且需要挂在物体上,我会在上面拨打retain
以便我拥有它。我需要这样做,因为你的方法名称暗示我不是主人。只要您返回一个自动释放的对象,这是正确的。但是如果你不自动释放该对象,它最终会有一个保留计数为2 - 一旦你分配它,一次保留它。当我最终发布它时,它的保留计数仍为1,并且永远不会从内存中释放,导致内存泄漏。
答案 2 :(得分:2)
问题是userFollowings
永远不会被释放。尝试以
return [userFollowings autorelease];
答案 3 :(得分:1)
试试这个:
NSMutableArray* userfollwings = [[[NSMutableArray alloc] init] autorelease]