对象释放和分配时间

时间:2010-06-11 16:10:18

标签: objective-c memory-management nsurlconnection

此问题的代码太长,无法使用。但我很确定我的问题与发布课程有关。

我有一个帮助类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。他们如何重叠/相互冲突?

谢谢。

1 个答案:

答案 0 :(得分:0)

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

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

如果您的应用程序崩溃,那么听起来更像是早期发布的内容。可能是您设置为连接委托的对象。最后但并非最不重要的是你看过ASIHTTPRequest处理连接?它是一个CFNetwork包装器,使用起来非常简单,非常强大。

希望这会有所帮助。