2013-12-18 42 views
5

Co to jest najlepsza praktyka do analizowania typów pierwotnych w iOS (int, float, BOOL itp.) Podczas przechowywania ich w dataObjects do późniejszego wykorzystania.Standard kodowania dla parsowania typów pierwotnych w iOS

Czy należy go parsować i zapisać jako numer NSN lub po prostu zapisać jako typ pierwotny?

Na przykład: jeśli otrzymuję "userId" z serwera jako typ długi. Powinno być:

@property (nonatomic, strong) NSNumber *userId; 

self.userId = [element objectForKey:@"user_id"]; 

lub:

@property (nonatomic, assign) long userId; 

self.userId = [[element objectForKey:@"user_id"] longValue]; 

Dzięki.

+1

Jeśli chcesz przechowywać je w NSArray lub NSDictionary, to oczywiście NSNumber, et al, jest drogą do zrobienia. Ale dla wygody do "codziennego" użytku, typ pierwotny jest lepszy. Może to być szczególnie frustrujące testowanie, np. Numer NSN BOOL i zapomnienie o podjęciu 'boolValue' z niego. –

+0

Twój tytuł dotyczy parsowania - jednak twoje pytanie nie ma nic wspólnego z * analizą *. Jeśli serwer wyśle ​​ci JSON, parser * JSON * faktycznie "przeanalizuje" tekst JSON i utworzy reprezentację. Najprawdopodobniej nigdy nie będziesz zawracać sobie głowy analizowaniem samego JSON-a. – CouchDeveloper

Odpowiedz

1

Moim zdaniem, dobrą praktyką jest posiadanie go w prymitywnej formie, o ile nie będziecie go tolerować podczas ciężkich operacji. Jest to mniejsze obciążenie dla kompilatora. Oczywiście procesor nie kosztuje nawet zegara. Ale staje się wydajny, gdy przechodzisz do większej ilości danych.

0

Jeśli robi zbyt wiele operacji matematycznych lub coś wykorzystanie danych prymitywne ..

I, można tworzyć własne pobierające i setter, jak

-(long) getuserId 
{ 
    return userID; 
} 

-(void) setuserId:(long) userId 
{ 
    userID = userId; 
} 

Ale jeśli nie robi żadnej złożonej operacji, lepiej trzymać się nie-prymitywów. Ponieważ operowanie operatami na obiektach takich jak NSNumber jest dość łatwe i mają wstępnie zdefiniowane metody działania na nich.

0

To naprawdę zależy od tego, co chcesz lub potrzebujesz z tym zrobić. Przechowywanie go jako NSNumber dodaje niewielki narzut i dużo wygody dla takich rzeczy jak konwersja do innych typów wartości i wstawianie do obiektów kolekcji.

0

Czy typem danych jest numer? Jeśli nie, nie zapisałbym go jako jednego.

Rozważmy zapisaniu BOOL jako NSNumber: a później deweloper patrząc na kodzie może pomyśleć, że następujący kod jest wystarczająca:

if (_registered) { 
// whatever 
} 

gdzie registered jest NSNumber że wygląda jak BOOL.

+0

To jest ważny punkt. chociaż mogę wdrożyć metodę get dla _registered, aby zwrócić [_registered boolValue]; – Lirik

0

Na podejścia jest „double-headed” One:

@property(nonatomic, strong) NSNumber* myBoolObj; 
-(BOOL)myBool; 

... 

-(BOOL)myBool { 
    return myBoolObj.boolValue; 
} 

Poprzez specjalnie zbieranie nazwę kończącą się w pewnym słowa takie jak „obj” (i przy użyciu tego sufiksu konsekwentnie do wszystkich takich „hybrydowych” właściwości) nie możesz przypadkowo użyć myBoolObj, gdzie miałeś na myśli myBool. Ale nadal masz tę zaletę, że możesz łatwo przypisać swoją wartość do/z NSDictionaries i NSArrays, itp.