2011-06-10 47 views
1

當我用NSURLRequest使用autorelease時,應用程序崩潰。NSURLRequest autorelease?

NSURLRequest *getRequest = [[NSURLRequest requestWithURL:[NSURL URLWithString:query]] autorelease]; 

我是obj-c的新手,我不確定內存管理是如何工作的。我需要手動做一個[getRequest release]

如果是這樣,我應該什麼時候做...在我創建NSURLConnection後?

或NSURLConnection是否釋放請求?

我有一個相關的問題是NSMutableArray。當我將一個對象添加到數組中時,是否需要在將該對象添加到數組後將其釋放?添加到數組的對象的內存生命週期是什麼?

回答

2

在ObjC編碼之前仔細研究這個問題 http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html

問題的答案:

requestWithURL給出了一個自動釋放的對象,因此沒有需要發佈/自動釋放(作爲一個經驗法則,大多數類的(工廠)方法提供了自動釋放的對象 - 釋放他們之前查看文檔)。

不需要顯式釋放添加到數組/字典的對象。從陣列/列表中刪除或刪除集合時它們被釋放。 (本質上添加到陣列+從數組中刪除會抵消)

+0

謝謝。如果我在我的數組上調用removeAlObjects,那麼是否也會刪除添加到數組中的對象? – user605957 2011-06-10 21:55:17

+0

@ user605957是的。 – Tatvamasi 2011-06-10 21:56:04

+0

同樣,如果我做了一個objectAtIndex並得到一個指向該對象的指針,當我完成處理我得到的對象時,是否需要釋放該指針? – user605957 2011-06-10 22:23:46

1

您(或當前例程)完成後釋放一個對象。如果您使用autorelease,則不需要發佈(正如名稱可能意味着的那樣)。

+0

當我將該對象放入數組時,該數組是否添加了另一個引用,在這種情況下,我需要在將數組添加到數組後將其釋放? – user605957 2011-06-10 21:36:59

+0

編號數組將釋放它時陣列的釋放。它已經取得了所有權,它將放棄它。 – 2011-06-10 21:38:30

+1

添加之前和之後詢問。據我所知,'retainCount'是不可靠的。 – 2011-06-10 21:49:50

0
[NSURLRequest requestWithURL:[NSURL URLWithString:query]] 

返回一個自動釋放的對象,所以你不必添加一個自動釋放消息

否則可以在一個類屬性保持它並在稍後發佈它