Verständnis schwache Referenz
Ich habe Folgendes ARC-fähigen code
@property (nonatomic, weak) NSArray *a;
- (void)viewDidLoad
{
[super viewDidLoad];
self.a = @[@1, @2];
NSLog(@"ab is %@", self.a); //prints details of array
//Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
for (id element in self.a) { //empty here
NSLog(@"blah");
}
//Dispose of any resources that can be recreated.
}
Dies ist der einzige Ort, wo ich die self.a
. Dies ist ein test-Programm, das ich schrieb, um zu Debuggen eines meiner Probleme.
Wenn ich simulieren Speicher Warnung self.a
verschwindet? Warum?
InformationsquelleAutor Sandeep | 2013-03-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Um zu verstehen, dass Sie haben, um zu verstehen, Referenz zählt. In Objective-C, die jedes Objekt hat einen reference count, also die Anzahl der starken Referenzen auf das Objekt). Wenn es keine starken Referenzen, die referenzzahl ist
0
und das Objekt wird freigegeben.self.a = @[@1, @2];
erstellt einen autoreleasedNSArray
(D. H. es wird automatisch veröffentlicht werden zu einem späteren Zeitpunkt) und ordnet, dassself.a
. Sobald Sie den autoreleasepool, entwässert wird der reference count des Arrays ist0
(vorausgesetzt, dass keine anderen starken Referenzen), und es wird freigegeben.self.a
wird eine schwach variable automatisch auf null.Wenn Sie
[[NSArray alloc] init]
initialisieren Sie das array und weisen Sie es einem weak pointer ist, wird das Objekt freigegeben werden, sofort nach der Abtretung ermächtigt. In derNSLog
,a
wirdnil
.In Xcode 4.6 der compiler Sie warnen vor den letzteren Fall.
InformationsquelleAutor Sebastian
ARC Führt Neuen Leben Qualifier
es wird nicht erhöhen den Referenzzähler um 1. Es wird nicht zum Eigentümer des Objekts, sondern nur einen Verweis darauf. Wenn der Verweiszähler des Objekts fällt auf 0, obwohl Sie möglicherweise noch auf Sie zeigen hier, wird es aus dem Speicher freigegeben.
(nonatomic, copy, stark, schwach)
Also hier, um Ihre schwache Objekt weist den eingehenden Wert, um es ohne Zurückhaltung. Und Sie haben nicht die Kontrolle über die Objekt-Gültigkeitsdauer, das Objekt, Das Sie referenzieren, schwach, lebt nur auf, weil mindestens ein anderes Objekt hat einen starken Bezug zur it. Sobald das nicht mehr der Fall, wird das Objekt zerstört wird und Ihre schwache Eigenschaft wird automatisch gesetzt auf null, nachdem einmal verwendet.
InformationsquelleAutor βhargavḯ