内存泄漏
问题描述:
我在我的解析器:内存泄漏
+(NSArray *)parseMethode:(NSData *)xmlData {
...
return [myNSArray autorelease];
}
,并在其他控制器我已经做到了这一点:
@synthesize anOtherNSMutableArray;
- (void)requestFinished:(ASIHTTPRequest *)request
{
NSData *responseData = [self.currentRequest responseData];
self.anOtherNSArray = [MyClassParsers parseMethode:reponseData];
...
}
,当我吃午饭的仪器也检测到了我发生泄漏线:
self.anOtherNSArray = [MyClassParsers parseMethode:reponseData];
在我的代码中是否有泄漏?
感谢您的回答
答
下面
self.anOtherNSArray = nil ;
self.anOtherNSArray = [MyClassParsers parseMethode:reponseData];
答
刚刚尝试这一点
NSData *responseData = [self.currentRequest responseData] autorelease];
+0
什么是做到这一点,请的原因? – izan 2011-05-13 11:37:20
+0
你试过了吗? – 2011-05-13 11:38:39
答
我想您已经定义这种属性anOtherNSArray尝试:
@property (...,retain) NSArray *anOtherNSArray;
保留属性意味着使用访问者将自动保留该值!使用访问 :
self.anOtherNSArray = something;
将这样做比不使用的访问,但保留值:
anOtherNSArray = [someting retain];
您应该:
- 没有定义anOtherNSArray的保留属性(使用assign来代替)如果这个值不必在这里保留
- 不使用访问器(remov e“自我”)
- 在设置新值之前释放实例!
最后一个选项是最简单和最安全的一个(按照Jhaliya的说法,“self.anOtherNSArray = nil;”将释放实例并将其设置为零)!
阅读,可以帮助你了解一点点是什么性质:http://cocoacast.com/?q=node/103
它解决了我的泄漏问题。但我不明白为什么? – izan 2011-05-13 11:54:05