Converting object_setInstanceVariable() to ARC?

2019-04-12 04:19发布

问题:

I wish to convert an instance of

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

to ARC. When I try to use Xcode built-in Objective-C ARC converter I get the following error:

'object_setInstanceVariable' is unavailable: not available in automatic reference counting mode

How should I handle this problem? I know I can put --fno-objc-arc as Compiler flag, but I would very much like to use ARC instead, if it's possible (I have a lot of targets that I otherwise would have to manually change the Compiler flag for).

(The code is originally taken from NSObject+NSCoding and Archiver by Mike Mayo at Rackspace Mobile Apps)

回答1:

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

The only other method to do this is:

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

You need the Ivar value beforehand, which can be obtained via class_getInstanceVariable(Class class, char* name).

Overall this will achieve the same effect as before, whilst now being ARC compatible.