我是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. 對象釋放和零值
- 4. 可比對象與對象類型之間的區別
- 5. Java對象與用戶定義對象之間的區別
- 6. 當我釋放對象時,viewDidUnload和dealloc函數之間的區別
- 7. 相對與絕對之間的區別
- 8. Django的,_base_manager之間的區別對象
- 9. 對象和*之間的區別?
- 10. 對象和散列之間的區別?
- 11. 對象和字典之間的區別?
- 12. 函數對象之間的區別R
- 13. 對象之間的區別(javascript和jquery)
- 14. 「或」與「||」之間的區別?
- 15. ~~與Math.floor之間的區別()
- 16. onetomany和manytomany註釋之間的區別
- 17. 地標和註釋之間的區別
- 18. 解釋Intent和PendingIntent之間的區別
- 19. 機器代碼與對象代碼之間的區別
- 20. PHP - 新對象與new \ Object之間的區別?
- 21. 使用Access.Application對象與數據庫連接之間的區別
- 22. express.Router()與多個express()對象之間的區別?
- 23. Javascript:顯式拋出錯誤對象與否之間的區別
- 24. ActionScript - 「通配符」與對象數據類型之間的區別?
- 25. VS中「釋放」和「主」之間的區別是什麼?
- 26. C#XNA Visual Studio:「釋放」和「調試」模式之間的區別?
- 27. 數據傳輸對象(DTO)與愚蠢的業務對象之間的區別?
- 28. 對於前導零的數字,python2和3之間的區別。
- 29. null ==對象和對象== null之間的區別
- 30. 面向對象和非面向對象之間的區別javascript
@您可以通過將變量設置爲零來避免這種情況,一旦您釋放它們。 謝謝,我不知道。但是如果一個變量保留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