Was ist der richtige Weg, um zu erklären, eine readonly-Eigenschaft für ios mit ARC

Ich bin neu in der iOS-Entwicklung im Allgemeinen und haben nie befasst mit manuellem reference counting (retain, release, autorelease). Als solche, die ich nicht haben ein gutes Verständnis von dem, was Magie ARC durchführt.

Ich dachte, ich Verstand, bis ich gefragt wurde, welche Art von Eigentum ( weak , strong, assign etc) sollte gegeben werden, um eine readonly-Eigenschaft auf ein Objekt gerichtet, wie:

@property (readonly,nonatomic) NSString* name;

Ich hier gelesen habe
Fragen über eine readonly - @Immobilien in BOGEN das verlassen der strong/weak nicht wirklich kompilieren, es sei denn, Sie geben einen Rückhalt variable, wenn Sie @synthesize Eigentum, ich habe Sie nur so geschehen zu sein, die Angabe background-ivar wie diese:

@synthesize name = _name;

Jetzt verstehe ich, dass der Standard-Lebenszeit des qualifier' einer Variablen ist stark, von hier: http://developer.apple.com/library/ios/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html#//apple_ref/doc/uid/TP40011226-CH1-SW4

So, um zu schneiden eine lange Geschichte kurz - ich bin indirekt die Definition meiner Eigenschaft als (readonly,nonatomic,strong) als _name ivar ist implizit deklariert als __strong.

Habe ich ein paar Fragen:

  1. Ist strong richtigen Leben qualifier verwenden? Ich gehe davon aus, dass es ist, sonst wird das Objekt sichern meine NSString* wäre nicht im Besitz überall und würde somit automatisch freigegeben (aus dem Java-land-dies macht Sinn, da alle Referenzen sind starke Standard).

  2. Gibt es noch andere Modifikatoren, die Sinn machen in dieser situation, wie copy oder assign?

  3. Tut der Deklaration der Eigenschaft als (readonly,nonatomic,strong) und (readonly,nonatomic) keinen Unterschied machen, mit dem code, der verbraucht Eigentum? zB. nicht zu deklarieren, ohne die strong keyword Ursache der Objekt-Zeiger gespeichert werden, wie __unsafe_unretained wo die strong - Eigenschaft gespeichert werden, in einer __strong Zeiger?

Dank!

BEARBEITEN

So wie ich das jetzt verstehe, gilt das folgende für readonly-Eigenschaften:

  • Für nicht-NSObject* Typen (int, float, void*, etc) verwenden (readonly, assign).
  • Für Objekt-Pointer, verwenden Sie (readonly, strong) oder (readonly, copy) - diese Funktion das gleiche für readonly-Eigenschaften, aber Sie können die copy-Semantik bei Verlängerung/Unterklasse und deklarieren Sie die Eigenschaft wie readwrite.
  • Für den Objekt-Zeiger, (readonly, weak) macht nur Sinn, wenn Sie gehen, um die Speicherung einer bereits schwachen Zeiger in dieser Eigenschaft (die Zeiger müssen stark sein, an anderer Stelle oder das Objekt wird freigegeben).
  • Beachten Sie, dass zu "starke" impliziert ist, so dass, wenn Sie erweitern eine readonly angegeben (readonly) mit (strong) es wird funktionieren, aber (copy) nicht. Stattdessen würden Sie sehen, "ARC verbietet Synthese eine Eigenschaft ... mit unbekannter Eigentums-oder Speicher-Attribut." In diesem Fall müssen Sie explizit die header-definition (readwrite, copy). Dieser stolperte, mich für ein paar Minuten.
InformationsquelleAutor Wayne Uroda | 2012-05-22
Schreibe einen Kommentar