Als eine andere Antwort zu Recht betont, dieses gemeinsame Singleton wird nie freigegeben werden. Es gibt zwei Teile „Warum“, welche beide kommen aus der folgenden Zeile zu beantworten:
static MySingleton * sharedObject = nil;
Zuerst static
. static
verändert innerhalb einer Funktion wie dieser die Lebenszeit einer Variablen und ändert sie von automatic
, dem impliziten Standardwert, auf static
. Dies bedeutet, dass diese Variable für die gesamte Lebensdauer des Programms existiert.
Zweitens macht diese Deklaration sharedObject eine starke Referenz. Variablen in Objective-C sind standardmäßig stark, aber pedantisch sein, die Sie geschrieben haben könnte:
static __strong MySingleton * sharedObject = nil;
Also: wir eine Variable, die für die gesamte Dauer des Programms lebt (static
), und das unterhält ein starke Bezugnahme auf das Objekt, das es darstellt (__strong
). Mit diesen beiden Informationen und der Tatsache, dass Sie das Objekt, auf das die Variable verweist, niemals ändern, können Sie ableiten, dass sharedObject
niemals freigegeben wird.
Mein Anliegen ist über alle Möglichkeiten, wo Singleton-Instanz automatisch freigegeben wird? –
Das Objekt wird freigegeben, wenn keine starken Referenzen darauf vorhanden sind. Der Zeiger 'sharedObject' ist eine starke Referenz, deren Lebensdauer die gleiche ist wie die des gesamten Programms. Diese Antwort ist völlig falsch. –
Sie haben ein grundlegendes Missverständnis darüber, wie ARC funktioniert. – Andy