2013-03-25 19 views
31

Przepraszam Jestem początkującym deweloperem iOS, ostatnio krótko usłyszałem, że @synthesize jest teraz @synthesize w pewnej wersji Xcode i że kompilator automatycznie syntezuje i właściwości i przypisuje _ do prywatnych zmiennych.Objective-C jest @synthesize wymagane lub opcjonalne?

Przetestowałem to:

z zewnątrz @synthesize, można uzyskać dostęp do właściwości i pole prywatną używając

self.property_name = something; 
_property_name = something; //(used in getter and setters) 

z @synthesize PROPERTY_NAME, można uzyskać dostęp do właściwości i pole prywatną używając

self.property_name = something; 
property_name = something; 

Moje pytanie brzmi: czy naprawdę potrzebujemy już @synthesize? lub jest większa historia, której mi brakuje?

+1

jest opcjonalne. –

+1

najnowsza wersja kompilatora wstawi się do '@ synthesize', jeśli w większości przypadków go opuścisz. Właśnie napisałem o właściwościach tutaj: http://stackoverflow.com/questions/15493882/need-assistance-regarding-objective-c-properties-concept/15494036#15494036 – nielsbot

+1

Zobacz http://stackoverflow.com/questions/11666008/ automatycznie zsyntetyzowane-właściwości-in-xcode-4-4 – rmaddy

Odpowiedz

51

Nie musimy tego robić od Xcode 4.4, który dodał funkcję o nazwie Domyślna synteza właściwości.

Mówiąc najprościej, to automatycznie generuje:

@synthesize name = _name; 
+14

Zastrzeżenie: jeśli zastąpisz wszystkie metody generowane automatycznie, linia ta nie zostanie wygenerowana automatycznie (ale nadal możesz zapisać ją samodzielnie, aby pobrać zmienną). Ponadto właściwości zdefiniowane w protokołach nie zostaną zsyntetyzowane automatycznie (zamiast tego pojawi się ostrzeżenie kompilatora). Wreszcie, podklasy obiektu 'NSManagedObject' również mają to zachowanie wyłączone, ponieważ jest w dużej mierze niepożądane. – borrrden

+3

Ta odpowiedź * jest * po prostu umieszczona. Aby uzyskać szczegółowe informacje, przeczytaj ten post: [Automatyczna synteza właściwości z Xcode 4.4] (http://useyourloaf.com/blog/2012/08/01/property-synthesis-with-xcode-4-dot-4.html) –

+2

Kolejny Zastrzeżenie: Jeśli zadeklarowałeś właściwości w protokole, będą one wymagały syntezy. –

-3

ile używałeś go jak mam, to i tak trzeba go, o ile mogę powiedzieć:

w ncurses.h :

@property int32_t FwdID; 

w .m:

@synthesize FwdID; 

Wykorzystanie wewnątrz klasy:

FwdID = 0; 

Z tego co mogę powiedzieć, jeśli chcesz domyślny pracować dla ciebie, będziesz musiał wpisać _FwdID = 0; w kodzie, który wydaje mi się brzydki.

Więc jeśli jesteś podobny do mnie (łamiąc wszystkie standardowe konwencje kodowania, które zakładam), nadal będziesz musiał użyć syntezatora.

+0

Powinieneś uzyskać dostęp do właściwości poprzez ich pobierające i ustawiające '[self setFwdID: 0];', w przeciwnym razie użyj prawdziwej zmiennej instancji, a nie właściwości. –

Powiązane problemy