2015-05-13 23 views
5

vorrei sapere quale posto è migliore per collocare i IBOutlets da storyboard:IBOutlet best practice

a) Nel file di intestazione (h)

b) In un'estensione classe creata sul. m file di

Grazie

saluti

+0

se si desidera accedere a quella presa da altri VC quindi .h altrimenti .m –

+0

@Bhavin best practice potrebbe portare a non voler accedere alla presa da un altro VC – Wain

risposta

3

Supponendo che questo è per un controller di vista, l'opzione b è migliore in quanto non si dovrebbe esporre la prese pubblicamente fo r altre classi con cui interagire direttamente. Dovrebbero essere considerati le tue conoscenze private. Il controller dovrebbe esporre un'interfaccia diversa e più appropriata.

Se si tratta di una vista, è un po 'più grigio il modo in cui dovresti affrontare il problema poiché MVC ti porta ad esporre le prese per consentire al controller di utilizzarle. MVVM ti porta a nascondere i punti vendita in modo che la vista passi un oggetto del modello di vista e configuri internamente le prese.

4

L'estensione di classe è il posto migliore se non si desidera esporre pubblicamente tale presa. Il tuo .h dovrebbe essere pulito e pulito e dovrebbe contenere solo quei metodi o proprietà che sono pubblici (disponibili per altri programmatori). In questo modo non si confondere il vostro compagno di squadra non avendo Ivars inutili e metodi di decelerazione in .h file di

E 'tutto su come gestire il codice e fare meno confusione, altrimenti non ci sono metodi/proprietà in Objective-C

privati

Anche se si controlla qualsiasi campione di mela seguono lo stesso schema. per esempio. LoadingStatus.m ha codice

#import "LoadingStatus.h" 

@interface LoadingStatus() 

@property (nonatomic, strong) UIActivityIndicatorView *progress; 
@property (nonatomic, strong) UILabel *loadingLabel; 

@end 
7

Da Resource Programming Guide: Nib Files di Apple:

Outlet sono generalmente considerati privato alla classe che definisce; a meno che non vi sia un motivo per esporre pubblicamente la proprietà, nascondere le dichiarazioni di proprietà come un'estensione di classe.

1

Il @interface può apparire sia nel file .h (proprietà pubbliche) e il file .m (proprietà private). Gli IBOutlet devono essere dichiarati nel file .m.

Se siete interessati leggere questo topic.

Cheers!

11

Devi tenere a mente che .h è un'intestazione pubblica.

Quindi posiziona il tuo IBOutlet lì se dovrebbero essere accessibili da altre classi.

Tuttavia, anche se è possibile farlo. Direi che esporre lo IBOutlet in un'intestazione pubblica non è una buona pratica (dal punto di vista dell'orientamento agli oggetti) poiché stai esponendo alcuni dettagli di implementazione che dovrebbero essere visibili solo a chi è interessato.

In breve, posizionare il numero IBOutlet in un'estensione di classe nello .m è una buona pratica.