programing

ARC는 file -fno-objc-arc를 표시하더라도 구조체 또는 유니언에서 Objective-C 개체를 금지합니다.

yellowcard 2023. 7. 29. 08:21
반응형

ARC는 file -fno-objc-arc를 표시하더라도 구조체 또는 유니언에서 Objective-C 개체를 금지합니다.

ARC는 file -fno-objc-arc를 표시했음에도 불구하고 구조체 또는 유니언에서 Objective-C 객체를 금지합니다.왜 그럴까요?

저는 만약 당신이 그것을 -fno-objc-arc로 표시한다면 당신은 이 제한을 받지 않을 것이라고 가정했습니다.

이 메시지가 표시되면 __unsafe_unretained를 시도해 보십시오.구조물의 객체가 고정되지 않은 경우에만 안전합니다.예:OpenFint를 ARC와 함께 사용하는 경우 ClassOFragDelegateStrings는 구조체에서 이 오류를 말합니다.

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

로.

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

구조체를 사용하는 대신 Objective-C 클래스를 만들어 데이터를 대신 관리할 수 있습니다.

이는 아크가 구조체나 유니언의 객체를 추적할 수 없기 때문입니다(그 점이 플레인 C 포인터이기 때문입니다).

문제의 파일/클래스를 다음으로 표시했음에도 불구하고-fno-objc-arc아크에 의해 제어되는 개체를 매개 변수로 전달할 수 있으며, 이 경우 메모리 누수가 발생할 가능성이 높습니다.

이제 오류 없이 작동하는 것 같습니다. 아마 이 변경 이후일 것입니다.

즉, C 구조에서 Objective-C 개체에 대한 일반(강력) 포인터를 넣을 수 있습니다.ARC에 의해 관리됩니다. 예를 들어, 구조물이 파괴될 때 유지되지 않습니다.확인 대상:

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

언급URL : https://stackoverflow.com/questions/8093099/arc-forbids-objective-c-objects-in-structs-or-unions-despite-marking-the-file-f

반응형