oglądałem wprowadzenie wideo WWDC ARC i zobaczyłem coś, czego nigdy nie widziałem w ObjC wcześniej, kiedy jakiś inżynier Jabłko mówił o przykład stosu.Zmienne instancji zadeklarowane w objc pliku wdrażania
Poniższy kod został wykorzystany na przykład stosu z łuku:
@implementation Stack
{
// instance variable declared in implementation context
NSMutableArray *_array;
}
- (id)init
{
if (self = [super init])
_array = [NSMutableArray array];
return self;
}
- (void)push:(id)x
{
[_array addObject:x];
}
- (id)pop
{
id x = [_array lastObject];
[_array removeLastObject];
return x;
}
@end
Uwaga zmiennej instancji zadeklarowaną tuż po dyrektywie @implementation.
Teraz zaskoczyło mnie to, że zmienna instancji może zostać zadeklarowana w pliku implementacyjnym, nie będąc zmienną statyczną. Moje pytania byłyby następujące:
- Czy jest to nowa konstrukcja wprowadzona w pakiecie SDK dla systemu iOS 5, czy jest to możliwe przez długi czas?
- Czy dobrze byłoby zadeklarować zmienne instancji w implementacji, jeśli zmienne instancji nie będą dostępne poza obiektem? Wydaje się, że jest to o wiele czystsze niż użycie dyrektywy @private.
Czy masz pełny, nadający się do kompilacji przykład tego? –
Powyższy kod powinien się dobrze skompliować z zestawem SDK iOS 5. –
Co powiesz na dodanie iVars do rozszerzenia klasy? –