ARC запрещает объекты Objective-C в структурах или объединениях, несмотря на то, что они маркируют файл -fno-objc-arc

ARC запрещает Objective-C объекты в структурах или объединениях, несмотря на то, что они отмечают файл -fno-objc-arc? Почему это так?

У меня было предположение, что если вы отметите его -fno-objc-arc, у вас нет этого ограничения.

Ответ 1

Если вы получили это сообщение, попробуйте __unsafe_unretained. Это безопасно, если объекты в структуре не будут сохранены. Пример. Если вы используете OpenFeint с ARC, класс OFBragDelegateStrings говорит об этой ошибке в структуре.

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

к

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

Ответ 2

Скорее, чем использование struct, вы можете создать класс Objective-C для управления данными.

Ответ 3

Это потому, что дуга не может отслеживать объекты в структурах или объединениях (так как они в этой точке простые C-указатели).

Даже если вы отметили рассматриваемый файл/класс -fno-objc-arc, вы все равно можете передать объект, управляемый дугой, как параметр, что, скорее всего, приведет к утечке памяти.