W Objective-C chciałbym wiedzieć, co oznaczają znaki +
i -
obok definicji metody.
- (void)loadPluginsAtPath:(NSString*)pluginPath errors:(NSArray **)errors;
objective-c
syntax
method-declaration
Gyurisc
źródło
źródło
@classmethod
i@method
czy tak, też. Dlaczego tak zwięzły ...?(+) Metody klasowe: -
Są metody zadeklarowane jako statyczne. Metodę można wywołać bez tworzenia instancji klasy. Metody klasy mogą działać tylko na elementach klasy, a nie na elementach instancji, ponieważ metody klasy nie są świadome elementów instancji. Metod instancji klasy nie można również wywoływać z metody klasy, chyba że są one wywoływane w instancji tej klasy.
(-) Metody instancji: -
Z drugiej strony wymaga wystąpienia instancji klasy, zanim będzie można ją wywołać, dlatego należy utworzyć instancję klasy przy użyciu nowego słowa kluczowego. Metody instancji działają na określonych instancjach klas. Metody instancji nie są deklarowane jako statyczne.
źródło
+ metody są metodami klasowymi - to znaczy metodami, które nie mają dostępu do właściwości instancji. Służy do metod takich jak metody przydzielania lub pomocnicze dla klasy, które nie wymagają dostępu do zmiennych instancji
- metody są metodami instancji - odnoszą się do pojedynczej instancji obiektu. Zwykle używany do większości metod w klasie.
Więcej informacji znajduje się w specyfikacji języka .
źródło
self
, ale raczej klasę. Po prostu nie są powiązane z instancją, a wyszukiwanie metod nie odbywa się poprzez instancję, ale przez klasę. Nadal można by zrobić+exchangeIVarOf: (MYObject*)a with: (MYObject*)b { MYObject* x = a->ivar; a->ivar = b->ivar; b->ivar = x; }
Ostateczne wyjaśnienie tego od Apple znajduje się tutaj, w sekcji „Metody i wiadomości”:
https://developer.apple.com/library/mac/referencelibrary/GettingStarted/RoadMapOSX/books/WriteObjective-CCode/WriteObjective-CCode/WriteObjective-CCode.html
W skrócie:
+ oznacza „metodę klasową”
(metodę można wywołać bez wystąpienia instancji klasy). Nazywasz to tak:
- oznacza „metodę instancji”
Najpierw musisz utworzyć instancję obiektu, a następnie możesz wywołać metodę na obiekcie). Możesz ręcznie utworzyć instancję takiego obiektu:
(to zasadniczo przydziela przestrzeń pamięci dla obiektu, a następnie inicjuje obiekt w tej przestrzeni - nadmierne uproszczenie, ale dobry sposób na myślenie o tym. Możesz przydzielić i zainicjować obiekt osobno, ale nigdy tego nie robisz - może to prowadzić do nieprzyjemnych problemów związanych ze wskaźnikami i zarządzanie pamięcią)
Następnie wywołaj metodę instancji:
Alternatywny sposób uzyskania wystąpienia obiektu w celu C jest następujący:
który wywołuje metodę klasy „numberWithInt” klasy NSNumber, która jest metodą „fabryczną” (tj. metodą zapewniającą „gotową instancję” obiektu).
Cel C pozwala również na tworzenie niektórych instancji obiektów bezpośrednio przy użyciu specjalnej składni, jak w przypadku takiego ciągu:
NSString * myStringInstance = @ "abc";
źródło