3 Stimmen

Soll die Referenz auf das Core-Datenobjekt stark oder schwach sein?

Ich konnte keinen Kernbereichsbezug zu etwas außerhalb von Core Data denken. Daher kann es keinen Verweiszyklus geben. Höchstens zeigt ein Core-Data-Objekt auf andere Core-Data-Objekte.

Dennoch, ich könnte falsch liegen.

Managed Object Context hält keine starke Referenz zu Core Data.

Gibt es hier eine Anleitung?

1voto

Jeff Punkte 3507

Gibt es hier eine Anleitung?

Hier ist ein Link zur Core Data Programmierhandbuch: Objektlebensdauer Verwaltung.

Es wurde im Juli 2014 aktualisiert, daher kann es neue Informationen enthalten, die zum Zeitpunkt Ihrer Frage nicht veröffentlicht wurden.

Standardmäßig sind die Verweise zwischen einem verwalteten Objekt und seinem Kontext schwach. Das bedeutet, dass Sie sich im Allgemeinen nicht darauf verlassen können, dass ein Kontext die Lebensdauer einer verwalteten Objektinstanz sicherstellt, und Sie können sich nicht darauf verlassen, dass die Existenz eines verwalteten Objekts die Lebensdauer eines Kontexts sicherstellt. Anders ausgedrückt, nur weil Sie ein Objekt abgerufen haben, bedeutet das nicht, dass es bestehen bleibt.

Die Ausnahme von dieser Regel ist, dass ein verwalteter Objektkontext einen starken Verweis auf alle geänderten Objekte aufrechterhält

Dies bedeutet, dass Ihre Verweise auf NSManagedObject-Unterklassen (Core Data-Objekte) strong sein sollten.

1voto

chikuba Punkte 4064

Ich bin derzeit auch unsicher, ob Referenzen stark oder schwach sein sollten. Die vorherigen Jungs sagten, dass sie stark sein sollten, aber dann fand ich das hier:

https://developer.apple.com/library/prerelease/watchos/documentation/Cocoa/Conceptual/CoreData/CoreDataandStoryboards.html#//apple_ref/doc/uid/TP40001075-CH10-SW1

Im Beispielcode macht Apple das:

@interface DetailViewController : UIViewController

@property (weak) AAAEmployeeMO *employee;

@end

Was wir normalerweise tun, ist eine starke Referenz zum Primärschlüssel des Objekts zu haben und dann eine schwache Eigenschaft, die die träge Initialisierung durchführt, wenn das Objekt null ist. Wie das hier:

@interface MyVC : UIViewController

@property (nonatomic, strong) NSString *objectId; 
@property (nonatomic, weak) SomeObject *myCoolObject; 

@end 

@implementation MyVC 

- (SomeObject *)myCoolObject {
    if (_myCoolObject == nil) {
        _myCoolObject = [SomeObject MR_findFirstByAttribute:@"primaryKey" withValue:self.objectId];
    }
    return _myCoolObject; 
} 

Ich bin immer noch unsicher, ob dies der richtige Weg ist. Bitte korrigieren Sie mich.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X