【发布时间】:2011-02-07 07:45:58
【问题描述】:
可以像在 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 属性(只读、非原子等),但这些对我没有帮助……除非你有创造性的方式来使用它们。我还研究了使用带有 __attribute__(("Insert attribute here")) 关键字的 C 属性,但是 C 具有用于特定目的的特定属性,我什至不确定您是否可以在运行时阅读它们。如果我错过了可以帮助我的人,请告诉我。
我尝试使用typdef。例如:
typdef int serializableInt;
serializableInt myInt;
并使用property_getAttributes() Objective-C 运行时函数,但它告诉我的只是 myInt 是一个 int。我猜 typedef 在这种情况下非常像一个宏......除非我可以在运行时创建一个 serializableInt 类型的变量。无论如何,这是您从property_getAttributes() 获得的值的Apple's documentation。
另一个要求是该属性必须与 NSObject 子类以及原始数据类型一起使用。我想到了将黑名单或白名单作为 ivar 添加到类中的想法,它会告诉我要跳过或序列化哪些属性,这基本上是相同的想法。我只是想把黑/白列表移到属性中,这样当你看到一个类的头文件时很容易理解,它在我创建的任何类中都是一致的,而且不容易出错。
另外,这是需要考虑的事情。我真的不需要属性有值(TRUE 或 FALSE;1、2、3 或其他),因为属性本身就是值。如果属性存在,则序列化;否则,跳过。
感谢任何帮助。如果您确定这在 Objective-C 上是不可能的,请告诉我。谢谢。
【问题讨论】:
-
如何创建一个类方法,该方法返回一个包含可序列化实例变量名称的数组?
-
我想到了这一点,这是一个完美的解决方案。但我的问题是专门关于用属性解决这个问题的。 Objective-C 中是否存在自定义属性?
标签: objective-c ios attributes properties