我可以在applicationDidFinishLaunching:
中使用異步請求創建NSURLConnection
對象,並且不在實例變量中保留對它的引用,如下所示?需要引用NSURLConnection?
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
NSURLConnection *localVariable = [[NSURLConnection alloc] initWithRequest:req delegate:self];
}
我相信這應該工作時不使用ARC。雖然我不再提及NSURLConnection
對象,但它應該完成它的工作,並且不會被釋放,直到我使用其中一個委託方法釋放該對象,如connectionDidFinishLoading:
,因爲它將留下applicationDidFinishLaunching:
保留計數爲+1,對吧?
但問題是:這是否被認爲是不好的風格?我應該總是用這種對象關係來維護一個實例變量嗎?我能做些什麼來使這項工作與ARC?畢竟,當localVariable
超出範圍,ARC會釋放我的NSURLConnection
,我想。
但是這也意味着我不應該真正依靠'NSURLConnection'來保留它自己,因爲它既不明顯也不正式記錄它會表現得那樣,對吧?爲了達到這個目的,NSURLConnection是做什麼的?它是否足以讓它在實例變量中保持對自身的強烈引用? (沒有ARC,它可以簡單地在'init'中調用'[self retain]',我想。) – tajmahal
@tajmahal:我確定'NSURLConnection'的行爲與我描述的一樣(也來自我自己的實驗),但你是當然,沒有記錄,所以保持參考是安全的方式。 - 對於第二個問題:是的,唯一的方法是連接在實例變量中保留對自身的強引用。 –