15

我只是问是否可以通过类别添加实例变量。我的特殊问题是,我需要将 NSIndexPath 属性添加到 ASIHTTPRequest 对象,但原则上我不想将 ASIHTTPRequest 子类化。

我有其他选择吗?

谢谢你的回答,克里斯蒂安

4

1 回答 1

19

类别不能声明额外的实例变量,但从 OS X 10.6 和 iOS 3.1 开始,您可以使用关联引用来解决这个问题。

您可以使用关联引用来模拟将对象实例变量添加到现有类。使用关联引用,您可以在不修改类声明的情况下向对象添加存储。这是通过objc_setAssociatedObject和完成的objc_getAssociatedObject。如果将这些调用包装在属性的自定义 getter 和 setter 中,则可以伪造 ivar。

看看Ole Begemann的这篇文章

于 2011-05-28T15:35:46.900 回答