我发现 Objective-C 对象属性可以标记为@dynamic
让编译器知道实现将在运行时可用。我想知道是否有一种方法可以告诉编译器对象上的所有属性都是动态的,而无需逐一显式指定它们(我没有预先提供属性列表)。我知道如果我只使用这不会成为问题[object something]
但出于风格目的我想使用object.something
句法。
我相当确定不可能这样做,但我希望有人能证实这一点。由于这不是用于生产用途的解决方案,因此可以涉及您可以想象的任何内容。
Thanks.
附加信息:
- 我只关心
-something
(getter) 工作,所以如果您的解决方案不支持 setter,那也没关系。
Example:
@interface MagicalClass : NSObject
// property 'something' is not defined!
@end
@implementation MagicalClass
- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector { ... }
- (void)forwardInvocation:(NSInvocation *)anInvocation { ... }
@end
MagicalClass *obj = [[MagicalClass alloc] init];
[obj something]; // compiler warning
obj.something; // compiler error
这确实不适用于声明的属性。它们的重点是您预先声明您的属性是什么以及如何与它们交互。如果您没有任何要声明的属性,那么您就没有任何已声明的属性。
不幸的是,它也不起作用well使用纯消息,尽管它比点语法工作得更好。 Objective-C 的静态类型检查会抛出大量警告,如果任何属性属于非对象类型,它可能无法生成正确的调用代码。
这种事情在 Python 和 Ruby 这样的语言中很常见,这些语言不需要声明东西,但它与 Objective-C 不能很好地契合。在 Objective-C 中,访问任意属性通常是通过字符串完成的(参见键值编码 and NS属性字符串).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)