我是Objective-C的新手,我無法理解這一點。我知道我可以發送一條消息給零(它對Objective-C的特性大肆宣傳),但我不能發送消息給發佈的對象,在這種情況下得到一個異常,它們之間的區別是什麼?零與釋放對象之間的區別
1
A
回答
3
nil
是內存地址0運行時知道什麼時候這個地址傳遞消息不做任何事情,因爲它是的預定不存在的對象地址。
然而,解分配的對象將隨機內存地址,因爲指針沒有清理時,以前有效的對象被銷燬。由於它不是規定的不敏感對象地址,因此運行時不知道它是無效的,並且會嘗試將消息發送給它。這通常會使程序立即崩潰。
您可以通過一旦你釋放了他們設置變量nil
避免這種情況。
0
nil是'指向沒有',它允許發送消息到零(無)。 一個對象有一個數據抵抗的地址。您使用此地址發送消息並釋放該對象。就像這樣:
id myObject; // Initialized some where else
[myObject release];
,然後將其發送類似這樣的消息:
[myObject someMessage]; // At this point myObject != nil. Not allowed
那麼你實際上是試圖將消息發送到現在釋放的對象的地址。這是不允許的。
myObject = nil;
[myObject someMessage]; // Allowed
相關問題
- 1. 在[super delloc]語句前後釋放對象之間的區別?
- 2. 來自IIFE的對象與返回對象之間的區別
- 3. Java對象與用戶定義對象之間的區別
- 4. 當我釋放對象時,viewDidUnload和dealloc函數之間的區別
- 5. 對象和字典之間的區別?
- 6. 對象和散列之間的區別?
- 7. 函數對象之間的區別R
- 8. 地標和註釋之間的區別
- 9. onetomany和manytomany註釋之間的區別
- 10. Javascript:顯式拋出錯誤對象與否之間的區別
- 11. 機器代碼與對象代碼之間的區別
- 12. ActionScript - 「通配符」與對象數據類型之間的區別?
- 13. express.Router()與多個express()對象之間的區別?
- 14. C#XNA Visual Studio:「釋放」和「調試」模式之間的區別?
- 15. 數據傳輸對象(DTO)與愚蠢的業務對象之間的區別?
- 16. 對於前導零的數字,python2和3之間的區別。
- 17. null ==對象和對象== null之間的區別
- 18. jvisualvm活動對象和分配對象之間的區別
- 19. 對象和變量對象之間的區別
- 20. mysqltransaction對象(mysql)和transactionscope對象(asp.net)之間的區別
- 21. 子對象和包含對象之間的區別
- 22. 面向對象和非面向對象之間的區別javascript
- 23. 對象和字符串對象之間的區別是什麼
- 24. iPhone [(id)對象類]和object_getClassName(id對象)之間的區別
- 25. 可變對象和不可變對象之間的區別
- 26. Kotlin:對象和同伴對象之間的區別
- 27. 對象引用聲明和對象構造之間的區別?
- 28. 衝孔與零距離之間的區別
- 29. 自我註釋中的自我與自我之間的區別?
- 30. 排水和排放之間的區別
@您可以通過將變量設置爲零來避免這種情況,一旦您釋放它們。 謝謝,我不知道。但是如果一個變量保留count == 2會發生什麼情況,並且釋放後它不會被釋放,如果我將它設置爲零,但它有其他所有者,我不會很好,對不對? – Burjua 2010-07-25 16:14:08
@Aristarh:只要你釋放一個對象,你應該認爲它已經死了。不要擔心其他參考。對象的其他所有者負責在完成它後釋放它。因此,將'nil'設置爲已被釋放的對象的引用是「本地安全的」。 – zneak 2010-07-25 16:44:01
好的,非常感謝您的解答,+1))) – Burjua 2010-07-25 16:49:25