2011-05-28 88 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