2012-06-01 3 views
10

Wenn ich die Modellobjekte für meine Entität in CoreData im ARC-Modus erstellen, generiert es stattdessen beibehalten oder stark. Behält er also Arbeit und kompiliert auch im ARC-Modus? Ich dachte, im ARC-Modus können wir keine Freigabe, Autorelease und behalten Keywords?CoreData-Modellobjekte in ARC verwendet behalten

+0

hmm das ist überraschend, keine Antwort? – theiOSguy

Antwort

4

Meinst du, dass es eine Erklärung wie folgt erzeugt?

@property (nonatomic, retain) MyObject *object; 

Die retain Eigenschaft Attribut bedeutet strong unter ARC.

4.1.1. Property declarations

+1

Das ist großartig, aber beantwortet nicht wirklich die Frage, ich mag diesen Typen, der ein Projekt mit ARC erstellt hat, und wenn man Core Data in den Mix einfügt, werden die NSManagedObjects mit Eigenschaften erzeugt, die retain, nicht stark verwenden. Obwohl dies in einem ARC-Projekt nicht zulässig sein sollte, wenn nicht anders angegeben, dass es sich um einen Nicht-ARC-Abschnitt des Projekts handelt, ist dies ein seltsames Ereignis. Es sollte erwartet werden, stark zu verwenden, nicht zu behalten, oder zumindest sollte der Compiler beschweren, dass es ARC-Regeln nicht entspricht ... Alle anderen Gedanken – Daniel

+10

ARC verbietet nicht die Verwendung des Schlüsselwortes 'retain'. Es verbietet die Verwendung des Retain-Selektors. Keywords und Selektoren sind völlig unterschiedlich. Siehe §7.1.1 des Dokuments, das ich verlinkt habe. –

+0

Danke für die zusätzlichen Informationen – Daniel

4

Bitte überprüfen Sie diese Antwort aus: https://stackoverflow.com/a/10036821/662605

Der Kern davon ist, dass der Code, wenn Sie @synthesize Ihre Eigenschaften, dann unter der Haube erzeugt wird von der Art retain verlassen (retain, assign, copy).

generierte Managed Object Unterklassen verwenden @dynamic nicht @synthesize, all dieses Zeug auf magische Weise für sie geschehen, also eigentlich, obwohl es verwirrend ist, das retain Schlüsselwort nicht verwendet wird wie es scheint, also die ARC nicht beschweren .. Ich bin mir ziemlich sicher, dass es das ist.

Obwohl ich habe versucht, die Umsetzung zu tauschen @synthesize zu verwenden und immer noch keine Fehler bekommen haben, aber ich denke, dass wir mit dieser Antwort auf den Link

Alle anderen Einsichten schön wäre, auf etwas sein könnte.