2016-10-21 3 views
0

Gibt es irgendeine Implikation, wenn ich nicht Selbst zu seiner Super-Init zuweisen, aber zu einem ganz anderen Zeiger, auch einen statischen? Wird sich der Lichtbogen korrekt verhalten? Was bedeutet eine solche Maßnahme?Zuweisen von Selbst in Init zu einem anderen Zeiger

static NSObject * StaticObject; 

- (instancetype)init { 

    self = StaticObject; 
    if (self) { 

    } 
    return self; 
} 

Antwort

2

ARC wird sich gut verhalten. Sie werden ein Problem haben, StaticObject zu initialisieren. Sie könnten etwas wie

if (StaticObject == nil) { 
    self = [super init]; 
    StaticObject = self; 
} else { 
    self = StaticObject; 
} 

tun Ich würde denken, dass die NSNull-Klasse so etwas tut.

Angenommen, StaticObject ist nicht nil und wurde initialisiert, verursachen Sie Verwirrung, wenn Sie StaticObject ändern, da andere möglicherweise einen Verweis darauf haben.

0

Ich bin mir nicht sicher, dass das sicher ist. Ich denke, du wirst die Erinnerung an das ursprüngliche Selbst verlieren und möglicherweise später dein Singleton überlösen. ARC ist keine Magie, es schleicht sich nur in Retain-/Release-Calls im Caller ein und Ihre Logik lässt ARC das Ergebnis des Alloc-Calls wahrscheinlich nie sehen.

Verwandte Themen