Pytanie Deklaracja pływaków w celu c


jestem nowy w Objective-C i mam problem z całością nonatomic, strong, weak, itp. Zastanawiam się, czy będę miał jakiekolwiek problemy z wykorzystaniem Core Data z float wartości zdefiniowane w następujący sposób:

@property (nonatomic) float * rating;
@property (nonatomic) float * mRating;

Czy powinienem zadeklarować inaczej?


10
2018-05-22 01:49


pochodzenie




Odpowiedzi:


Tak, powinieneś zadeklarować je bez gwiazdek:

@property (nonatomic) float rating;
@property (nonatomic) float mRating;

Gwiazdki wskazują wskaźniki. Wszystkie klasy Cel C są zadeklarowane z gwiazdkami, ponieważ instancje odwołują się do wskaźników. Prymitywy takie jak floats, ints itp. są zdefiniowane jako wartości, tj. bez gwiazdek. To samo dotyczy typów typowanych, takich jak CGFloat i NSInteger: pola skalarne tego typu powinny być zdefiniowane bez gwiazdki.


15
2018-05-22 01:52



Powinieneś także użyć CGFloat zamiast float. - more tension
@Blaine - Ponieważ gwiazdka to zupełnie inna bestia - wskaźnik w stosunku do prostej "wartości skalarnej". Jeśli nie rozumiesz różnicy, którą naprawdę musisz przestudiować na wskaźnikach i obiektach, zanim pójdziesz dalej z Objective-C. - Hot Licks
Jeśli korzystasz z danych podstawowych, należy zadeklarować je jako NSNumber, ponieważ powinien to być obiekt. - Joshua
@ Joshua - nie prawda, CoreData może eksportować właściwości jako skalary. - sapi
@sapi Tak, może, ale musisz go włączyć z jawną flagą w modelu, a generalnie bardziej odpowiednie jest używanie NSNumber ze względu na to, jak nieprzejrzysty jest on jako typ danych. - CodaFi


Powinieneś zdecydowanie stracić *, chyba że chcesz stworzyć wskaźnik. Poza tym wygląda świetnie!


0
2018-05-22 02:00



"stracić", a nie "stracić". - rmaddy