ARC verbietet Objective-C-Objekte in Strukturen oder Vereinigungen, obwohl die Datei -fno-objc-arc markiert ist? Warum ist das so?
Ich bin davon ausgegangen, dass Sie diese Einschränkung nicht haben, wenn Sie es -fno-objc-arc markieren.
Wenn Sie diese Nachricht erhalten haben, versuchen Sie es mit __unsafe_unretained. Es ist nur sicher, wenn die Objekte in der Struktur nicht zurückgehalten werden. Beispiel: Wenn Sie OpenFeint mit ARC verwenden, meldet die Klasse OFBragDelegateStrings diesen Fehler in einer Struktur.
typedef struct OFBragDelegateStrings
{
NSString* prepopulatedText;
NSString* originalMessage;
} OFBragDelegateStrings;
zu
typedef struct OFBragDelegateStrings
{
__unsafe_unretained NSString* prepopulatedText;
__unsafe_unretained NSString* originalMessage;
} OFBragDelegateStrings;
Eher als ein struct zu verwenden, können Sie stattdessen eine Objective-C-Klasse erstellen, um die Daten zu verwalten.
Dies liegt daran, dass arc keine Objekte in Strukturen oder Vereinigungen verfolgen kann (da es sich an diesem Punkt um einfache C-Zeiger handelt).
Auch wenn Sie die betreffende Datei/Klasse mit -fno-objc-arc
Markiert haben, können Sie dennoch ein von arc gesteuertes Objekt als Parameter übergeben, was höchstwahrscheinlich zu einem Speicherverlust führen würde.
Sieht so aus, als würde das jetzt fehlerfrei funktionieren, wahrscheinlich nach diese Änderung .
sie können normale (starke) Zeiger auf Objective-C-Objekte in einer C-Struktur setzen. Es wird von ARC verwaltet, z. B. wird es nicht beibehalten, wenn die Struktur zerstört wird. Verifiziert mit:
$ clang --version Apple LLVM version 10.0.0 (clang-1000.11.45.2)