在Objective-C中,我們應該保留還是釋放Class
類型的變量? A Class
是一個指向C結構體的指針。調用'保留'或'釋放'在類上做什麼?
回答
Class
被聲明爲指向struct
的指針是您應該嘗試忽略的實現細節。你應該把它看作是一個不透明的類型,它引用一個表示Objective-C類的Objective-C對象。
這些Class
Objective-C中的對象永遠不會被釋放。一旦創建,它們將一直存在,直到過程結束。因此,即使它們是真正的Objective-C對象,您也不需要保留和釋放它們。
至於當您將retain
或release
發送到Class
對象時會發生什麼具體情況:什麼都沒有。每個類對象的保留計數都有特殊值-1。當retain
和release
的默認實現看到保留計數爲-1時,它們什麼也不做。
C結構不是Objective C對象,除非它是您保留併發布的Objective C對象的成員(例如ivar),否則不能「保留」或「釋放」結構。
當然,您需要爲堆棧分配空間,或者通過「malloc
」(當您完成時不要忘記「free
」)。
OP可能講的是他們從調用'[obj class]'或'[Foo class]'獲得的'Class'。在GNU和Apple的實現中,儘管它是一個不透明的指向'struct Class'的指針,它們可以充當Objective-C類型,並且可以發送消息給它。一個確實可以做'[[NSObject class] release]',但正如另一個答案所說,沒有任何反應。你不應該試着「釋放()」它。 – paulotorrens
- 1. 減少objc_msgSend並保留/釋放調用
- 2. CFDictionaryValueCallBacks保留/釋放?
- 3. 釋放和保留
- 4. 代表 - 保留或分配 - 釋放?
- 5. Objective C保留/釋放調試
- 6. 如果我們保留或自動釋放池,該怎麼辦?爲什麼?
- 7. 什麼是IOS保留做在後端
- 8. 餘額保留與釋放?
- 9. 內存保留和釋放
- 10. 保留並釋放混淆?
- 11. 保留/釋放錯誤
- 12. NSString分配/釋放/保留
- 13. 它是否有任何意義或價值調用保留或釋放自動釋放對象?
- 14. 學習手冊保留/釋放的價值是什麼? (IOS)
- 15. 爲什麼保留/釋放而不是新建/刪除?
- 16. 當我返回NSArray的executeFetchRequest:result時,是否應該保留,自動釋放或者什麼也不做?
- 17. 保留/釋放 - 引用計數
- 18. 對對象使用保留和釋放
- 19. 覆蓋保留/釋放在ARC
- 20. 釋放保留的財產在self.view
- 21. 在自動引用計數下,爲什麼不允許保留,釋放和dealloc?
- 22. 綁定在ajax調用上做什麼?
- 23. 類似的方法來覆蓋保留和釋放在Swift 1或2?
- 24. 在MessageQueue上調用Close()或Dispose()什麼都不做
- 25. 在我自己的類中覆蓋保留和釋放方法
- 26. 做什麼:+和:或者在計劃上做什麼?
- 27. 處理保留/釋放/自動釋放和類變量的問題
- 28. 爲什麼我不應該在分配保留屬性時釋放?
- 29. 在Proguard中保留帶註釋的類
- 30. 保留屬性保留/釋放合成設置器
在這裏的標題中可能會有一些拼寫錯誤 - 你指的是一個指向結構或實現某個點的結構的指針(如NSPoint?) – Monolo
如果你將'Class'說成是在ObjC運行時中定義,那麼它是一個對象。如果不是,你能澄清嗎? –
你說的時候得到的類「對象」,例如'[NSArray class]'不是一個NSObject,也不受標準的Objective-C垃圾收集協議的約束。從本質上來說,每一個對於那個特定的Objective-C類都是一個「單身」,因此永遠存在。 –