Odkąd zacząłem pracować nad aplikacjami na iOS i celem C, byłem naprawdę zaskoczony różnymi lokalizacjami, w których można deklarować i definiować zmienne. Z jednej strony mamy tradycyjne podejście C, z drugiej mamy nowe dyrektywy ObjectiveC, które dodają do tego OO. Czy moglibyście pomóc mi zrozumieć najlepsze praktyki i sytuacje, w których chciałbym użyć tych lokalizacji dla moich zmiennych i być może poprawić swoje obecne rozumienie?
Oto przykładowa klasa (.h i .m):
#import <Foundation/Foundation.h>
// 1) What do I declare here?
@interface SampleClass : NSObject
{
// 2) ivar declarations
// Pretty much never used?
}
// 3) class-specific method / property declarations
@end
i
#import "SampleClass.h"
// 4) what goes here?
@interface SampleClass()
// 5) private interface, can define private methods and properties here
@end
@implementation SampleClass
{
// 6) define ivars
}
// 7) define methods and synthesize properties from both public and private
// interfaces
@end
- Rozumiem 1 i 4, że są to deklaracje i definicje oparte na plikach w stylu C, które w ogóle nie rozumieją pojęcia klasy, a zatem muszą być używane dokładnie tak, jak byłyby używane w C. Widziałem je używany do implementowania statycznych singletonów opartych na zmiennych wcześniej. Czy brakuje mi innych wygodnych zastosowań?
- Moje wnioski z pracy z iOS są takie, że ivars zostały prawie całkowicie wycofane poza dyrektywą @synthesize i dlatego mogą być w większości ignorowane. Czy tak jest?
- Odnośnie 5: dlaczego miałbym kiedykolwiek chcieć deklarować metody w prywatnych interfejsach? Moje metody klasy prywatnej wydają się dobrze kompilować bez deklaracji w interfejsie. Czy chodzi głównie o czytelność?
Wielkie dzięki, ludzie!