2013-05-15 20 views
7

Outlets possono essere creati in questo modoIBOutlets forti o deboli

@interface SearchViewController : UIViewController<UISearchBarDelegate> {  
    IBOutlet UIView *viewSearchBar; 
    IBOutlet UIScrollView *scrollVieww; 
    IBOutlet UILabel *lblName; 
} 

e anche come questo

@interface SearchViewController : UIViewController<UISearchBarDelegate> { 

} 

@property(nonatomic, weak) IBOutlet UIScrollView *scrollVieww; 
@property(nonatomic, weak) IBOutlet UIView *viewSearchBar; 
@property(nonatomic, weak) IBOutlet UILabel *lblName; 

@end 

So che la nonatomic/atomicstrong/weak in ARC, ma nel primo esempio quali sono essi? strong, weak, nonatomic o atomic.

Si prega di spiegare o collegarmi ad alcuni dettagli.

+1

Onestamente non importa se punti vendita belongi ng alla vista sono dichiarati forti o deboli in ARC perché la vista avrà un forte riferimento all'elemento. – Joe

+0

@Joe si sono d'accordo ma voglio ancora sapere, cosa sono –

+0

@lxt ho visto questa domanda prima, non mi ha eliminato per questo –

risposta

7

Le variabili di istanza in ARC sono forti per impostazione predefinita. E non sono né atomici né non anatomici, poiché sono solo variabili di istanza e non metodi di accesso. I flag atomici/non atomici sono correlati al multi threading. Specificano se i metodi di accesso devono essere atomici o meno. Quando un accessor è atomico, l'esecuzione non può essere modificata in un altro thread nel mezzo del metodo accessor. Quando non è anatomico, non esiste tale restrizione.

Nota: IBOutlet è un typedef di niente. È solo un flag per Interface Builder e non ha funzioni relative alla memoria.

+2

+1 A proposito, (e so che lo sai già, ma a beneficio dei futuri lettori), spero che i lettori non interpretino il tuo commento come suggerendo che renderlo 'atomic' assicura sicurezza del filo. Non è così. Vedi [Proprietà sono atomiche per impostazione predefinita] (http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html#//apple_ref/doc/uid/TP40011210-CH5-SW37) nella guida _Programmazione con oggettivo-C_. – Rob

+0

Per coloro che si chiedono quale sia la definizione esatta di 'IBOutlet' (dai documenti): Identificatore utilizzato per identificare una proprietà in modo che Interface Builder possa sincronizzare la visualizzazione e la connessione delle prese con Xcode. Inserisci questo identificatore immediatamente prima del tipo in qualsiasi dichiarazione. –

3

Regola generale, qualsiasi cosa con un IBOutlet deve essere dichiarata debole.

Dai un'occhiata allo weak or strong for IBOutlet and other.

+0

Grazie per aver collegato la mia risposta;) –

+1

+1 Qualsiasi cosa (eccetto gli oggetti di livello superiore, che è insolito che tu abbia mai il tuo 'IBOutlet' per quello) dovremmo essere deboli. Vedi [Gestione della durata degli oggetti] (https://developer.apple.com/library/ios/DOCUMENTATION/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html#//apple_ref/doc/uid/10000051i-CH4-SW6) nella Guida alla programmazione delle risorse. – Rob

5

variabili sono __strong per impostazione predefinita in ARC così:

IBOutlet UIView *viewSearchBar;

è uguale

IBOutlet __strong UIView *viewSearchBar;

Per quanto riguarda il metodo consigliato per affrontare IBOutlets sotto ARC vedi: the answer to this

+0

quindi dovremmo usare il 2 ° approccio? –

+0

Come ha detto, sono uguali. Non importa Consiglio di ometterlo e di specificare esplicitamente qualcosa di così forte quando è veramente importante o inaspettato. – DrummerB

+3

In realtà si raccomanda che gli IBOutlet siano generalmente deboli. Vedi la domanda collegata che ho aggiunto alla risposta. –