ARC forbids Objective-C objects in structs or unions despite marking the file -fno-objc-arc

后端 未结 4 1360
暖寄归人
暖寄归人 2020-11-29 00:43

ARC forbids Objective-C objects in structs or unions despite marking the file -fno-objc-arc? Why is this so?

I had the assumption that if you mark it -fno-objc-arc y

相关标签:
4条回答
  • 2020-11-29 00:56

    Looks like this now works without errors, probably after this change.

    i.e., You can put normal (strong) pointers to Objective-C objects in a C struct. It is managed by ARC e.g., it is unretained when the struct is destructed. Verified with:

    $ clang --version Apple LLVM version 10.0.0 (clang-1000.11.45.2)

    0 讨论(0)
  • 2020-11-29 01:03

    Rather than using a struct, you can create an Objective-C class to manage the data instead.

    0 讨论(0)
  • 2020-11-29 01:13

    That is because arc can't track objects in structs or unions (since they are at that point plain C pointers).

    Even though you marked the file/class in question with -fno-objc-arc you might still pass an object controlled by arc to it as parameter, which would most likely result in a memory leak.

    0 讨论(0)
  • 2020-11-29 01:21

    If you got this message try __unsafe_unretained. It is only safe, if the objects in the struct are unretained. Example: If you use OpenFeint with ARC the Class OFBragDelegateStrings says this error in a struct.

    typedef struct OFBragDelegateStrings
    {
         NSString* prepopulatedText;
         NSString* originalMessage;
    } OFBragDelegateStrings;
    

    to

    typedef struct OFBragDelegateStrings
    {
         __unsafe_unretained NSString* prepopulatedText;
         __unsafe_unretained NSString* originalMessage;
    } OFBragDelegateStrings;
    
    0 讨论(0)
提交回复
热议问题