2012-10-14 10 views
21

Wie Sie lesen here in den meisten Fällen sollte ein IBOutlet schwach sein.IBOutlet für NSTextView in einem ARC-Projekt

Nun, wie Sie in der development library lesen können, unterstützen nicht alle Klassen schwache Referenzen. (z. B. NSTextView). Das heißt, Sie haben assign zu verwenden:

@property (assign) IBOutlet NSTextView *textView; 

Wenn Sie einen schwachen Verweis Sie die folgende Fehlermeldung erhalten wird: „Synthese eines schwach-unavailable Eigenschaft nicht zulässig ist, weil es die Synthese eines Ivar des __weak Objekt erfordert "

Was die Dokumentation zu erwähnen vergessen hat, ist jetzt müssen Sie die Eigenschaft wieder auf Null setzen, nachdem es z durch eine dealloc Methode:

- (void)dealloc 
{ 
    self.textView = nil; 
} 

Soweit ich verstand Klassen mit NS_AUTOMATED_REFCOUNT_WEAK_UNAVAILABLE markiert unterstützt keinen schwachen Verweis, aber was ist der Grund?

+0

Wie verlinkt, sollte 'IBOutlets' standardmäßig ** strong ** sein! – Jay

Antwort

13

Ich glaube, ich den Grund gefunden, warum einige Klassen keine schwache Referenz unterstützen:

Rationale:

Wie Sie here lesen können historisch, ist es möglich, für eine Klasse ihre eigenen schaffen Reference-Count-Implementierung durch Überschreiben von Retain, Release usw. Schwache Referenzen auf ein Objekt erfordern jedoch eine Koordination mit der Referenz-Zählimplementierung seiner Klasse, da unter anderem schwache Ladungen und Speicher in Bezug auf die endgültige Version atomar sein müssen. Daher werden vorhandene benutzerdefinierte Referenzzahlimplementierungen schwache Referenzen im Allgemeinen ohne zusätzlichen Aufwand nicht unterstützen. Dies ist unvermeidlich, ohne die Binärkompatibilität zu unterbrechen.