2017-01-03 4 views
0

Ich habe diesen Code:Wann wird dieses Objekt freigegeben?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Override point for customization after application launch. 

    [[[PPFormEngine alloc] init] downloadAndCacheFormDataIfNeeded]; 

    return YES; 
} 

I ARC verwenden.

Wer weiß, wie das System das PPFormEngine-Objekt behandelt? Wird dieses Objekt noch ein paar Sekunden nach der Rückkehr von dieser Methode existieren und dann automatisch freigegeben werden?

Antwort

3

Angenommen, downloadAndCacheFormDataIfNeeded ist asynchron - kehrt sofort zurück und startet eine Hintergrundaufgabe, um den Download durchzuführen - dann ist die Lebensdauer der Instanz PPFormEngine vollständig ein Implementierungsdetail dieser Klasse.

Wenn es während des Downloads einen starken Bezug auf sich selbst hält, wird es bleiben. Wenn nicht, wird es schnell freigegeben; entweder sofort nach downloadAndCacheFormDataIfNeeded oder irgendwann später, wenn es zufällig in einen Autorelease-Pool fiel.

Unabhängig davon würde die sicherste Implementierung eine starke Referenz in einer Instanzvariable beibehalten, die nach Abschluss des Downloads auf null gesetzt wird. Hoffentlich hat PPFormEngine einen Callback irgendeiner Art, so dass Sie wissen, wann Sie die Referenz löschen müssen.

2

ARC sollte einen Anruf an release so hinzufügen, dass das Objekt freigegeben wird, bevor der Anruf return YES erreicht wird. Also nein, es wird einige Sekunden nach der Rückkehr der Methode nicht mehr existieren. Nach der Rückkehr der Methode gibt es keine Sekunden mehr.

Nun, nachdem ich das oben genannte gesagt habe, kenne ich die Implementierung der downloadAndCacheFormDataIfNeeded Methode nicht. Wenn die Implementierung self beibehält, bis der Download und die Zwischenspeicherung abgeschlossen sind, tritt kein Problem auf.

Verwandte Themen