當你在一個方法內實例化一個對象時,當這個方法被調用的時候,對象將被分配內存,但是什麼對象將持有對這個對象的引用,或者當方法結束時它會被自動釋放。謝謝。當在Obj-C中的方法內創建對象時,對象的內存會發生什麼變化?
-1
A
回答
0
在OS X和iOS 5+中,Objective-C使用Automatic Reference Counting。在這種情況下,該對象在超出範圍時被釋放,就像您期望的那樣。
在此之前,您需要明確保留和釋放對象。 Here's a useful article from 2010 on this topic.
Objective-C的在保持計數模式(不使用垃圾收集)是 簡單的想法。當你明確地分配一個對象時,它得到一個保留 的計數爲1,當你在一個對象上調用release或autorelease時,它的值是 ,保留計數減1,然後收集對象。 這是iOS設備上唯一可用的模式,自操作系統開始以來已在 Mac OS X上使用。
0
簡短的回答,如果您使用ARC(自動保留計數)或者如果對象自動釋放,它將在適當時發送release
消息。
如果您手動管理內存,你必須手動發送release
方法時,他們被要麼new
,alloc
,retain
,copy
或mutableCopy
返回的對象,否則該對象會泄漏你會失去任何當堆棧被撕毀時引用它。
0
如果您的應用程序是ARC那麼它將在超出範圍後解除分配。如果對象是一個類的屬性,那麼它將通過不同的規則進行清理,具體取決於它是否被定義爲strong
或weak
。強意味着只要擁有它的對象指向它,對象就不會被清理(只要擁有它的對象存在,那麼它就不會被清除)。弱意味着物體不會被清理,只要另一個物體指向它。
相關問題
- 1. 當我在線程內創建對象的引用時會發生什麼?
- 2. 當兩個類創建對象時會發生什麼?
- 3. 在.NET中投射對象時會發生什麼變化?
- 4. 當對象內容發生變化時觸發腳本
- 5. 先前分配對象的內存會發生什麼?
- 6. WPF:綁定到對象的屬性;當對象改變時會發生什麼?
- 7. 在測試中創建的模型對象會發生什麼?
- 8. 當在Javascript中重新分配對象變量時,原始對象會發生什麼變化?
- 9. 創建對象時的內存分配
- 10. 爲什麼在函數中改變的對象改變了它們在內存中的指向,但有時會創建一個新的內存對象?
- 11. 在Scala中,當內部對象擴展封閉類時會發生什麼?
- 12. ARC投 - 駭客objc對象的內存
- 13. 在被刪除的對象內動態分配對象會發生什麼?
- 14. 在Php中,當一個對象無法實例化時會發生什麼?
- 15. 在Javascript中創建並存儲在函數中的對象會發生什麼?
- 16. 在對象內部創建原型方法有什麼缺點?
- 17. 當對象狀態發生變化時調用方法
- 18. 創建本地opencv mat對象時發生內存泄漏
- 19. 當JVM退出時,堆中的對象會發生什麼?
- 20. 當我在Hibernate中合併對象時會發生什麼?
- 21. 當我在C++中爲對象賦值時,會發生什麼?
- 22. 當你創建一個這樣的對象時會發生什麼?
- 23. 當finilize方法設置對象對對象屬性的引用時會發生什麼
- 24. Java在對象內創建對象
- 25. 使用java中的main方法爲類創建對象時發生了什麼
- 26. Objc對象釋放內存管理
- 27. 取消時線程的內存會發生什麼變化?
- 28. 當你拋出異常時,python對象會發生什麼變化
- 29. 優化在循環內創建對象
- 30. 當您產生activerecord對象時會發生什麼?
我應該更具體:我指的是ARC,對象不是類的實例變量,只是在方法結束之前持有info,比如字符串的長度。所以這裏的簡單答案似乎是:「什麼時候超出範圍?」 – user2909415