可以像在 VB.NET 中一样在 Objective-C 中创建自定义属性吗?例如,在 VB.NET 中,您可以创建“Browsable”属性并在运行时读取它以确定是否应该显示属性。
Public Class Employee
<Browsable(True)> _
Public Property Property1() As String
Get
End Get
Set(ByVal Value As String)
End Set
End Property
<Browsable(False)> _
Public Property Property2() As String
Get
End Get
Set(ByVal Value As String)
End Set
End Property
End Class
我想在 Objective-C 中做同样的事情,即使它是一个只能在编译时设置并且根本无法更改的固定属性。
我想做的是将一个属性添加到我的类的属性中,以确定属性是否应该序列化。
我知道标准的 Objective-C 属性(只读、非原子等),但这些对我没有帮助......除非你有一种创造性的方式来使用它们。我还研究了使用 C 属性__attribute__(("Insert attribute here"))
关键字,但 C 有用于特定目的的特定属性,我什至不确定您是否可以在运行时读取它们。如果我错过了一个可以帮助我的人,请告诉我。
我尝试使用typdef
。例如:
typdef int serializableInt;
serializableInt myInt;
并使用property_getAttributes()
Objective-C 运行时函数,但它只告诉我 myInt 是一个 int。我猜在这种情况下,typedef 非常像一个宏...除非我可以在运行时创建一个serializedInt 类型的变量。无论如何,这里是苹果的文档 http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtPropertyIntrospection.html#//apple_ref/doc/uid/TP40008048-CH101关于你从中获得的价值观property_getAttributes()
.
另一个要求是该属性必须与 NSObject 子类以及原始数据类型一起使用。我想到了向类添加黑名单或白名单作为 ivar 的想法,它会告诉我要跳过或序列化哪些属性,这基本上是相同的想法。我只是想将黑/白列表移至属性,以便当您看到类的头文件时很容易理解,它在我创建的任何类中都是一致的,并且不易出错。
另外,这也是需要考虑的事情。我真的不需要属性有一个值(TRUE 或 FALSE;1、2、3;或其他),因为属性本身就是值。如果属性存在,则序列化;否则,跳过。
任何帮助表示赞赏。如果您确定这在 Objective-C 上是不可能的,请告诉我。谢谢。