【问题标题】:using objective c runtime functions in iOS app在 iOS 应用程序中使用目标 c 运行时函数
【发布时间】:2011-07-31 15:29:54
【问题描述】:

我想了解我的目标 C 类的属性类型。我看到我可以通过使用运行时函数 property_getAttributes(property) 来做到这一点,它返回一个像这样的 C 字符串:

    T@"UIColor",&,N,VsomeColor_   // ivar was UIColor* someColor_; property was (nonatomic, retain) UIColor* someColor; 

或者这个:

    Tf,N,vfontSize_   // ivar was CGFloat fontsize_; property was (nonatomic) CGFloat fontSize;

然后我可以解析该字符串,即查看初始 T 之后和以下逗号之前的部分。

我的问题是——这样做可能会稳定吗?还是有更好的办法?

【问题讨论】:

  • 这些看起来都像实现细节一样危险......
  • 好的,有没有更好的方法?
  • 这没关系,但它引出了一个问题:你为什么需要这样做?很少需要像这样的运行时自省。
  • 我想写一个从 plist 中读取 ivars 的通用方法,并让它适用于通用类。我也可以想象,这将使归档比现在更痛苦。

标签: iphone objective-c ios properties runtime


【解决方案1】:

property_getAttributes 是 Objective-C 运行时的一部分,如 here 所述。

如果您想获得某种关于 ObjC 类的自省,这是必经之路。我不认为这是不稳定的,因为 Objective-C 运行时本身是相当稳定的。此外,还有一个官方指南(参见上面的链接),因此您可以相信它与任何其他官方 Apple API 一样稳定。

【讨论】:

    猜你喜欢
    • 2014-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多