2012-01-13 11 views
11

na dobre hermetyzacji, przyzwoite Objective-C programiści umieścić swoje private Ivars w prywatnym extension zadeklarowanej w głównym pliku wdrażania, tak:Dodaj Ivars w @implementation

// MyClass.m 

@interface MyClass() { 
    float value; 
} 
@end 

@implementation MyClass 
@end 

Ale ostatnio znalazłem prostszy sposób do ukrycia private Ivars: Ivars mogą być zadeklarowane w bloku {} następujące @implementation coś takiego:

// MyClass.m 

@implementation MyClass { 
    float value; 
} 
@end 

jest to bardzo przydatne, gdy nie ma prywatnych metod, ale tylko private ivars muszą być ukryte.

Jednak nie jestem pewien co do jego ważności składni. Czy ktokolwiek może potwierdzić lub unieważnić go z niektórymi odniesieniami kanonicznymi?

Odpowiedz

11

To doskonale ważne i tutaj jest dokumentem przez Apple mówi o nim:

Osobiście nie używać go jako wolę składnię kategorii klasa kontynuacji.

+0

Link. : P – cHao

+0

@ cHao tak jabłko zaktualizowało swoją strukturę linków w pewnym momencie i zepsuło wiele starych linków ze stanowisk SO. Irytujące co najmniej. – Brynjar

+0

Oto zaktualizowany link: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html - poszukaj podpozycji "Możesz definiować zmienne instancji bez właściwości" a w dół strony. – jowie

3

Byłem także ciekawy tego. Here is the updated link from Apple:

można zdefiniować zmienne instancji bez Properties

To najlepsza praktyka w obsłudze nieruchomości na obiekcie w każdej chwili trzeba śledzić wartości lub innego obiektu.

Jeśli trzeba zdefiniować własne zmienne instancji bez deklarowania właściwości, można dodać je wewnątrz szelki u góry interfejsu klasy lub realizacji, na przykład: broken

@interface SomeClass : NSObject { 
    NSString *_myNonPropertyInstanceVariable; 
} 
... 
@end 

@implementation SomeClass { 
    NSString *_anotherCustomInstanceVariable; 
} 
... 
@end