在類擴展中聲明伊娃是否更好? 或者它只是一個開發人員的偏好?在類擴展中聲明一個ivar有什麼不對?
-3
A
回答
1
顧名思義,它是對類功能的擴展。您可以使用擴展爲課程添加額外的行爲。添加成員變量或存儲性能有即相當多的問題:
當它是可以添加數據成員在擴展原始類是不知道添加的數據成員的。這導致在爲這些類創建對象時分配給這些成員的問題。
它也可能會造成數據成員的初始化和取消初始化問題,因爲這些原始init()或deinit()方法不知道。
添加數據成員可能會改變類的行爲特性。
1
目前您無法將實例變量添加到類擴展中。對於swift和Obj-C都是如此。看到這個問題:Defining a property in iOS class extension。
如果你的意思是,通過添加伊瓦的接口擴展:
@interface MyClass(){
MyIvar *ivar
}
好,那是一個位的選擇和便利的問題。一般而言,您應該將公共接口限制爲允許用戶以您設計/期望的方式與課程進行交互的最小一組屬性/方法。雖然您的代碼可以使用任一方法正常工作,但暴露更多屬性/函數可能會導致更多問題,因爲使用類可能會使用未計劃或意外的方式使用屬性/函數。
相關問題
- 1. 聲明一個iVar屬性
- 2. 擴展一個JSON聲明
- 3. 擴展在類聲明中的含義是什麼?
- 4. 類擴展和typedef聲明
- 5. 聲明一個擴展另一個多態類的多態類
- 6. 爲什麼「擴展」,在類聲明之前「工具」
- 7. 是否有可能在類擴展中聲明一個受保護的ivar,並讓超類能夠訪問它或做什麼?
- 8. C++什麼放在一個類聲明,什麼不是
- 9. 從Typescript中的聲明接口中擴展一個類
- 10. 在類聲明中聲明一個類對象的指針
- 11. 聲明骨幹擴展類在另一個文件 - CoffeeScript的
- 12. 爲什麼要在Java中聲明一個不可變類final?
- 13. 爲什麼我不能在類中聲明一個字符串?
- 14. 爲什麼在相同的頭文件中聲明一個類爲類聲明
- 15. 聲明proporder在擴展級
- 16. 有什麼不對的C聲明碼?
- 17. 有什麼不對本聲明
- 18. 有什麼不對的迭代聲明
- 19. 計劃 - 我試圖擴展此聲明有什麼問題?
- 20. 在其類中聲明一個對象
- 21. 爲什麼我不能在一個C++類中聲明一個空的構造函數,該類使用一個私有構造函數來擴展
- 22. 爲什麼C++有一個「;」在類聲明後
- 23. 何時聲明類擴展方法
- 24. 聲明擴展類的方法
- 25. 如何擴展類型聲明?
- 26. Angular2擴展類和聲明提供者
- 27. PHP OOP:獲取已擴展另一個父類的所有聲明類
- 28. 一個類的「朋友」是否擴展到該類中聲明的類?
- 29. 在Groovy中擴展一個類並實現一個特性有什麼區別?
- 30. 如何聲明擴展泛型的類擴展泛型
你試過了嗎?它工作嗎? – gnasher729