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


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

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

3 84

3 ответа:

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

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

до

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

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

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

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