将object_setInstanceVariable()转换为ARC?

时间:2012-11-02 14:00:13

标签: ios automatic-ref-counting

我希望转换

的实例
object_setInstanceVariable(self, [key UTF8String], *(id**)addr);

到ARC。当我尝试使用Xcode内置的Objective-C ARC转换器时,我收到以下错误:

  

'object_setInstanceVariable'不可用:在自动引用计数模式下不可用

我该如何处理这个问题?我知道我可以把--fno-objc-arc作为编译器标志,但我非常想使用ARC,如果可能的话(我有很多目标,否则我必须手动更改编译器标志) 。

(该代码最初由Mike Mayo在Rackspace Mobile Apps中从NSObject+NSCoding and Archiver获取)

1 个答案:

答案 0 :(得分:4)

来源:https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html

执行此操作的唯一方法是:

void object_setIvar(id object, Ivar ivar, id value);

您需要事先获得Ivar值,这可以通过class_getInstanceVariable(Class class, char* name)获得。

总的来说,这将达到与以前相同的效果,同时现在与ARC兼容。