2016-07-09 14 views
1

Angenommen, ich möchte eine schwache Referenz erstellen, so dass es nicht von einem Block beibehalten wird. Also ich habe eine Eigenschaft:Schwache Referenzen Rätsel

@property (nonatomic, strong) MyClass *myObject; 

und ich dies tun:

__weak typeof(self.myObject) myObjectWeak = self.myObject; 

void (^doSomething)() = ^void() { 
    [myObjectWeak doSomething];  
}; 

aber was ist das:

__weak typeof(self) selfWeak = self; 

void (^doSomething)() = ^void() { 
    [selfWeak.myObject doSomething];  
}; 

Wird dies die gleiche Wirkung erzeugen? Ich meine, einen schwachen Bezug zu myObject innerhalb des Blocks zu haben? Ich vermute es ist nicht, aber ich muss es nur bestätigen.

+0

Entschuldigung, ich hatte einen Tippfehler auf meine Frage. Ich meinte 'selfWeak.myObject' nicht' selfWeak.myObjectWeak'. Ich habe die Frage korrigiert. – SpaceDog

+0

Danke. Bitte wandle diesen Kommentar in eine Antwort um, damit ich akzeptieren kann. – SpaceDog

Antwort

1

Ja, die Verwendung von selfWeak in diesem letzten Beispiel reicht aus, um den starken Referenzzyklus zu unterbrechen. Mach dir keine Sorgen darüber, dass du dort seine Eigenschaften referenzierst.

+0

T H A N K S! ! ! – SpaceDog