2011-05-28 87 views
15

我只是问是否可以通过类别添加实例变量。我的特殊问题是,我需要添加一个NSIndexPath属性到ASIHTTPRequest对象,但我不想将ASIHTTPRequest子类作为原则问题。Objective-C:类别中的实例变量

我有其他方法吗?

谢谢您的回答, 基督教

+0

可能重复的[Objective-C:属性在类别](http://stackoverflow.com/questions/8733104/objective-c-property-in-category) – hfossli 2014-01-16 08:24:37

回答

19

一个类别不能宣布额外的实例变量,但由于OS X 10.6和iOS 3.1可以解决这个与associative references

您可以使用关联引用来模拟将对象实例变量添加到现有类。使用关联引用,您可以将存储添加到对象而无需修改类声明。这通过objc_setAssociatedObjectobjc_getAssociatedObject完成。如果你将这些调用包装在一个属性的自定义getter和setter中,你可以伪造一个ivar。

看一看post来自Ole Begemann

+0

谢谢,但只是发现一个更简单的解决方案:userInfo- ASIHTTPRequest中的字典!但无论如何,谢谢! – cschwarz 2011-05-28 15:38:18

+1

我很高兴你解决了它!您可能希望用您的解决方案自己回答问题,并接受它或接受其他答案之一,以便问题不会被拒绝。 – albertamg 2011-05-28 18:15:24

+1

事实上,现在可以在类扩展中添加ivars。请参阅:http://stackoverflow.com/questions/5826345/how-to-declare-instance-variables-and-methods-not-visible-or-usable-outside-of-th/5826453#5826453 – 2011-05-28 18:24:32