有三種模式來創建數組變量的存儲器管理:文本語法
NSArray *array = @[@0, @1];
NSArray *array = [NSArray arrayWithObjects:@0, @1, nil];
NSArray *array = [[NSArray alloc] initWithObjects:@0, @1, nil];
當我使用第二種模式創建時,varialbe「數組」將被拋出到autoreleasepool; 當我使用第三個時,var的retainCount將是1,但不會被拋出到autoreleasepool; 我想知道第一種模式與第二種模式或第三種模式有相同的效果;
文本語法
回答
一般的規則是,如果你不調用一個方法開始「黃金」或「新」或含有「複製」,那麼你不擁有這個對象,也沒有權利也沒有責任釋放它。雖然,當然,如果你明確地保留一個對象,那麼你不得不平衡它與一個版本(或autorelease,這只是另一種安排釋放它的方式)。
不要試圖推斷哪些對象可能會或可能不會在autorelease池中。另外,不要試圖推斷保留計數。只關心自己的所有權和責任。
同樣重要的是要注意,在ARC中,autorelease的很多例子都被優化了,所以關於autoreleasepool的推理更加困難且毫無結果。 –
雖然這個答案有很好的信息,但它並沒有真正回答這個問題。像#2或#3一樣是#1嗎? – rmaddy
@rmaddy,我認爲它很好。 #1不涉及調用以「alloc」或「new」開始或包含「copy」的方法。 #2也不涉及這一點。 #3的確如此。那麼,我不能依賴讀者從中得出結論嗎? –
第一和第二模式的結果是相同的。 第一種模式是第二
來源的便利語法:Objective-C Literals
不完全正確:文字擴展爲'+ [NSArray arrayWithObjects:count:]'。但就autorelease而言,結果與您所說的相同。 –
始終將保留計數視爲增量。所以:
1. NSArray *array = @[@0, @1];
array
具有+0保留計數(即它保留並自動釋放上創建基本上是無能爲力的,事實上,它可能無法都得到了保留,並自動釋放所有 - NSString *foo = @"foo";
已完全相同的+0語義,但實現細節不是保留/ autorelease)。
2. NSArray *array = [NSArray arrayWithObjects:@0, @1, nil];
與(1)相同,只是更多的手指鍛鍊。
NSArray *array = [[NSArray alloc] initWithObjects:@0, @1, nil];
array
有+1保留計數至於你所關注。您需要知道的唯一細節是,爲了您的代碼的責任array
被放棄,該對象必須是release
d或autorelease
d。無論它是用+1保留計數創建的......是否有內部保留計數爲42 ...是否保留了5次並自動釋放了4 ....都與您的代碼完全無關。
除了內存分配的細節,有
NSArray* array = @[obj1, obj2, obj3];
和
NSArray* array = [NSArray arrayWithObjects: obj1, obj2, obj3, nil];
之間的一個很大的區別的第二個將在第一個零爭論停止。你期待一個包含三個元素的數組,但是如果obj1!= nil和obj2 == nil,那麼結果是一個包含一個元素的數組。如果obj1,obj2或obj3中的任何一個爲零,則第一個拋出異常。
- 1. 語法文本
- 2. 發明文本語法
- 3. 使用新文本語法
- 4. 從文本文件中獲取語法
- 5. Excel,Vba,Asterisk,語法,文本文件
- 6. 寫入文本文件無效語法
- 7. MYSQL文檔語法語法
- 8. 崇高文本蟒蛇無效語法
- 9. 語法問題文本框AS3
- 10. 匹配文本與XPath語法
- 11. 無法啓動TTS(文本到語音)
- 12. 語法錯誤SQL文本附近
- 13. 文本處理 - 識別代碼語法
- 14. MySQL的文本搜索或語法
- 15. crontab的腳本文件語法
- 16. sqlite聲明文本語法附近?
- 17. 文本語法是裏面的「回聲」
- 18. 無法運行Android文本到語音
- 19. 崇高文本Sweave語法高亮
- 20. 無法使用android語音文本
- 21. 純文本語法高亮(崇高文本)
- 22. 帶重音字符的繪圖文本(即法語文本)
- 23. 文本區域文本的Javascript語法檢查器?
- 24. 語音/語音到文本
- 25. 幫助使用一些特殊語法的大量文本文本的上下文無關語法
- 26. 無法寫入文本文件python 2.7無效語法?
- 27. javascript基本語法
- 28. Swift:基本語法
- 29. 基本LINQ語法
- 30. Bash腳本語法
有義務www.whentouseretaincount.com。 :) – bbum