我開始研究IOS開發,並對釋放對象的一些疑問,我沒有存儲引用..我看了一個問題「釋放沒有指針?」它建議在創建後立即發送自動釋放消息的對象,所以我試圖做同樣的在下面的一段代碼:錯誤自動釋放剛創建對象
int main(int argc, char *argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSURLResponse * response = nil;
NSError * error = nil;
NSData * data;
data = [NSURLConnection
sendSynchronousRequest: [[NSURLRequest requestWithURL:
[[NSURL URLWithString: @"http://www.google.it"]
autorelease]
] autorelease]
returningResponse: &response
error: &error];
[data writeToFile: @"/tmp/test.html"
atomically:NO];
[data release];
[pool drain];
return 0;
}
我不能嘗試的XCode執行程序尚未,但我正在linux下編譯,發送給NSURLRequest對象的autorelease消息導致了一個分段錯誤(我認爲這不是由消息本身引起的,而是由於自動釋放消息導致嘗試釋放該對象的緩衝池) 。我發送給NSURLRequest對象的autorelease消息有什麼問題?
我認爲如果像requestWithUrl這樣的類方法的引用文檔說它「創建並返回一個URL請求」,這意味着我有責任在完成使用時釋放對象,我錯了?我希望在進一步研究其他任何事情之前理解這個內存管理規則。我希望我的問題不是太愚蠢;-)
呃,只是最後一個問題:我是否應該釋放錯誤和數據同步請求返回的對象?
非常感謝您的幫助!
我想感謝大家的即時答覆!我懷疑它們是被自動釋放的,現在一切都變得更清楚了:如果我分配了一些我需要釋放的東西(或者將它標記爲稍後autorelease),如果我使用類方法創建實例,如+ requestWithUrl(不包含init /複製/新詞)我不應該釋放它,除非我保留它由於某種原因。 –
@Gianni,正好! :) – Vladimir