2010-06-11 64 views
0

此问题的代码太长,无法使用。但我很确定我的问题与发布课程有关。对象发布和分配时机

我有一个帮助器类ConnectionHelper.h/.m,它为我处理NSURLConnection。基本上,我给它我想要的URL,并返回数据(它也恰好对它做了一个快速的json解析)。它有一个委托给我的调用类(在这种情况下:DownloadViewController)。完成下载后,它会调用[delegate didFinishParseOf:objectName withDictionary:dictionary];。然后在DownloadViewController中释放ConnectionHelper并分配一个新的以下载下一个对象。

我的问题是,我这样做了一次,然后它创建第二个连接,然后我的程序只是崩溃。

[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyNever]; 
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; 

然后,我不认为任何下列方法被称为:这个电话后

- (NSCachedURLResponse *)connection:(NSURLConnection *)connection 
       willCacheResponse:(NSCachedURLResponse *)cachedResponse 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge 

所以我是对的,我不是释放的东西吗?当我第一次释放它时,dealloc函数没有被调用。我有办法“强制”它释放吗?我需要强制它吗?我认为这不重要,因为我为新的呼叫分配了一个新的ConnectionHelper。他们还会如何重叠/相互冲突?

谢谢。

回答

0

首先,你永远不会强制释放。如果你严格遵守内存管理规则,那么你甚至不必担心它。对于规则请看:

http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/MemoryMgmt/Articles/mmPractical.html#//apple_ref/doc/uid/TP40004447-SW1

如果您的应用程序崩溃它的声音,我更喜欢的东西被提前释放。可能是您设置为连接代表的对象。最后但并非最不重要的你是否看过ASIHTTPRequest来处理连接?这是一个CFNetwork封装器,使用起来非常简单,功能非常强大。

希望这有助于。

+0

我一次又一次地检查了我正在分配和释放的内容,我没有看到任何问题。我也看过retainCount,但我不明白是什么让它上下。当它成为另一个班级的代表时,它会上升吗? (如果是这样,我如何让授权课程发布它?) – RyanJM 2010-06-11 20:22:57

+0

我花了一段时间来追踪我的错误。最后,这是一个内存分配错误,但不是我直接使用的文件。在另一个类中,我有一个for循环,其中我使用了快速迭代,并为(MyObject * tempObj in myArray)做了一个循环,我试图在循环结束时释放该对象。随着规则的执行,我没有分配它,所以我不应该释放它。谢谢你的帮助。 – RyanJM 2010-06-14 15:52:31