什麼是最好的方式來創建一個只讀給公衆,並閱讀/寫入「私人」的財產?我可以創建一個只讀方法,並在.m文件中以無名擴展名聲明該屬性,但最好我想保留點符號。公衆閱讀,「私人」保留財產
2
A
回答
6
在你的公共接口,財產申報只讀即
// Foo.h
@interface Foo
{
@private
Baz* bar;
}
@property (readonly, retain) Baz* bar;
@end
在您的實現可以聲明class extension,那麼你重新聲明屬性讀/寫:
// Foo.m
@interface Foo() // Note parentheses
@property (retain) Baz* bar;
@end
@implementation Foo
@synthesize bar;
@end
上述手段那麼setter和getter都將被創建,但是在包含頭文件的文件中,只有getter會被瞭解。缺點是setter確實存在,所以如果你忽略了編譯器警告並在Foo.m之外使用setter,它仍然可以工作。
但是,相比直接聲明只讀屬性並直接訪問伊娃而言,您不必手動實現KVO,當然,內存管理自動完成。
2
通常人們在@synthesize
聲明中創建一個實例var並將其與readonly屬性配對。但是,伊娃不能通過點符號訪問。你必須直接通過它的名字來訪問它。
+0
我試圖通過'self'來訪問ivars。因爲它讓內存管理變得更簡單。 – Morrowless 2011-04-27 03:58:48
相關問題
- 1. 私人和公共財產
- 2. 公衆,保護私人
- 3. 改變公衆對私人
- 4. AutoFixture和私人財產
- 5. 私人財產和關閉
- 6. 閱讀微博公衆流
- 7. 支持擁有私有財產的公共財產?
- 8. 公共財產VS私有財產與getter?
- 9. snmp私人mib防止節點對公衆用戶可讀
- 10. 私人/保護/公衆如何影響ABI?
- 11. 目標c中的私人財產
- 12. 私人財產領域的StackOverflow例外
- 13. Reflection.Emit私人領域/財產訪問
- 14. 手稿錯誤:私人財產丟失?
- 15. 財產:私人方法或私人獲取/設置?
- 16. Fineuploader設置ACL公衆閱讀
- 17. 私人二傳手和只讀財產有什麼區別?
- 18. 遍歷數組保存私有財產
- 19. 對私有財產
- 20. 持有人保留財產時的行爲
- 21. 在xhtml閱讀persistente包財產(jsf)
- 22. 使用反射獲取私有財產的私有財產
- 23. 這是一個保留週期(財產)?
- 24. 財產沒有保留與例
- 25. 的iOS CLLocation財產不保留值
- 26. 在DTO保留財產案例
- 27. 在複製財產保留計數
- 28. - (空)dealloc的財產(非原子,保留)
- 29. 釋放保留的財產在self.view
- 30. 創建私有代碼的公共分支,私人向公衆推送更改
我沒有意識到你可以像這樣宣佈兩次。優秀! – Morrowless 2011-04-26 10:11:09
@hyn:順便說一下,點符號與'@ property'無關。如果你有一個方法聲明爲' - (Baz *)bar;'你可以使用點符號來訪問它。 – JeremyP 2011-04-26 10:15:58
也不知道。感謝您的信息:) – Morrowless 2011-04-27 03:56:46