2013-01-03 10 views
13

In Objective-C, è meglio pratica:Dichiarare le proprietà nell'interfaccia .h o in un'estensione nel file .m?

  1. Declare oggetti quali pulsanti nella .h e poi sintetizzare nel .m

    .h 
    @interface SomeViewController : UIViewController 
        @property (strong, nonatomic) UIButton *someButton; 
    @end 
    
    .m 
    @implementation SomeViewController 
        @synthesize someButton = _someButton; 
    @end 
    
  2. o dichiarano come ivars in il .m

    @interface SomeViewController() 
        @property (strong, nonatomic) UIButton *someButton; 
    @end 
    

ho notato che in un sacco di codice di Apple, in particolare thei r Codice di esempio breadcrumb, molte delle loro proprietà sono dichiarate nell'interfaccia. C'è una differenza tra i due? Ho anche notato che quando le proprietà sono dichiarate nello @interface, vengono automaticamente sintetizzate con un prefisso di sottolineatura, rendendo inutile la sintesi someButton = _someButton.

+2

Entrambe le dichiarazioni sono dichiarazioni di proprietà. L'ivar è creato da '@ synthesize'. Funzionano in modo identico; la differenza è la loro visibilità su altri file. –

risposta

31

In primo luogo, as of Xcode 4.4 non c'è più la necessità di @synthesize (a meno che non si cambia sia il metodo setter e getter), sia quando il @property è dichiarata nel @interface o @implementation.

Se si accede allo @property dall'interno della classe, dichiarare lo @property in un file class extension nel file .m. Questo fornisce l'incapsulamento e rende facile vedere che lo @property non viene utilizzato da un'altra classe.

Se lo @property viene utilizzato da altre classi, in base alla progettazione, quindi definirlo nello @interface nel file .h.

+1

Vorrei commentare che "raramente è più necessario usare' @ synthesize' ". (In alcuni casi, come proprietà o proprietà readonly su sottoclassi di Core Data, è ancora necessario utilizzare '@ synthesize' poiché Xcode non li capisce molto bene.) –

+0

Sono totalmente d'accordo con @ JRG-Developer. – zaph

+0

+1 bella spiegazione – Leena

Problemi correlati