ARC запрещает объекты Objective-C в структурах или объединениях, несмотря на маркировку файла-fno-objc-arc
ARC запрещает объекты Objective-C в структурах или объединениях, несмотря на маркировку файла-fno-objc-arc? Почему это так?
У меня было предположение, что если вы отметите его-fno-objc-arc, у вас нет этого ограничения.
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, в качестве параметра, что, скорее всего, приведет к утечке памяти.