2013-01-03 7 views
13

W celu C, jest najlepszym rozwiązaniem jest:Zadeklaruj właściwości w interfejsie .h lub w rozszerzeniu w pliku .m?

  1. stwierdzenie przedmiotów, takich jak guziki w .h i następnie syntezy w .m

    .h 
    @interface SomeViewController : UIViewController 
        @property (strong, nonatomic) UIButton *someButton; 
    @end 
    
    .m 
    @implementation SomeViewController 
        @synthesize someButton = _someButton; 
    @end 
    
  2. lub zgłoszone jako Ivars w .m

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

Zauważyłem, że w partii kodu Apple specjalnie thei r Przykładowy kod tartej bułki, wiele ich właściwości jest deklarowanych w interfejsie. Czy istnieje różnica między tymi dwoma? Zauważyłem także, że gdy właściwości są zadeklarowane w @interface, są automatycznie syntezowane z podkreślonym prefiksem, co czyni syntezę someButton = _someButton bezużyteczną.

+2

Obie te deklaracje są deklaracjami właściwości. Ivar jest tworzony przez '@ synthesize'. Działają identycznie; różnica polega na ich widoczności do innych plików. –

Odpowiedz

31

Najpierw as of Xcode 4.4 nie istnieje już potrzeba @synthesize (chyba zmienić zarówno metody setter i getter), albo gdy @property jest zadeklarowana w @interface lub @implementation.

Jeśli dostęp do @property jest możliwy tylko z poziomu klasy, zadeklaruj @property w class extension w pliku .m. Zapewnia to enkapsulację i ułatwia zrozumienie, że @property nie jest używane z innej klasy.

Jeśli zgodnie z projektem @property jest używany przez inne klasy, należy go zdefiniować w pliku @interface w pliku .h.

+1

Chciałbym powiedzieć, że "rzadko jest konieczne używanie' @ synthesize' ". (W niektórych przypadkach, takich jak właściwości tylko do odczytu lub właściwości w podklasach Core Data, nadal konieczne jest użycie '@ synthesize', ponieważ Xcode nadal nie rozumie ich zbyt dobrze.) –

+0

Całkowicie zgadzam się z @ JRG-Developer. – zaph

+0

+1 miłe wyjaśnienie – Leena

Powiązane problemy