Jaka jest różnica między metodami, które są zadeklarowane przez - i metod, które są zadeklarowane z +Różnica pomiędzy + i - metody w Objective-C
np
- (void)methodname
+ (void)methodname
Jaka jest różnica między metodami, które są zadeklarowane przez - i metod, które są zadeklarowane z +Różnica pomiędzy + i - metody w Objective-C
np
- (void)methodname
+ (void)methodname
Metody poprzedzone -
są metodami instancji. Oznacza to, że może być stosowany tylko na przykład z grupy, np
[myStringInstance length];
Metody poprzedzone +
są metody klasy. Oznacza to, że mogą być wezwani do klas, bez konieczności wystąpienia, np:
[NSString stringWithString:@"Hello World"];
Według this page:
Metody inicjowania zaczynają się od - a metody na poziomie klasy rozpoczynają się od +
Aby uzyskać więcej informacji, patrz this SO question.
minus są metody instancji (dostępne tylko za pośrednictwem instancja obiektu)
Plus są metody klasy (podobnie jak w Java Math.abs(), można go używać bez instantited Object)
Pierwszym jest metoda instancji, a druga to metoda klasy. Powinieneś przeczytać dokumentację Apple Objective-C, aby dowiedzieć się o różnicy.
+(void)methodname
jest zmienna klasa i -(void)methodname
jest zmienna obiektu.
Powiedzmy, że tworzysz klasę narzędzi, która ma metodę odwrócenia łańcucha. Klasa, którą nazywasz MYUtility.
Jeśli używasz +, jak
+ (NSString *)reverse:(NSString *)stringToReverse
Można go używać bezpośrednio jak
NSString *reversed = [MYUtility stringToReverse:@"I Love objective C"];
jeśli stosuje się - jak
- (NSString *)reverse:(NSString *)stringToReverse
Musisz użyć:
MYUtility *myUtil = [[MYUtility alloc] init];
NSString *reversed = [myUtil stringToReverse:@"There are many ways to do the same thing"];
Dzięki funkcji opartej na klasach po prostu dzwonisz bezpośrednio, ale nie masz dostępu do zmiennych lokalnych poza #defines, które możesz zrobić, ponieważ klasa nie jest instancjonowana.
Ale z. - (NSString trzeba instancję klasy przed użyciem, i masz dostęp do wszystkich zmiennych lokalnych
To nie jest wybrać jedną rzecz i zostać z nią, wiele klas mają zarówno, po prostu spójrz na plik nagłówkowy dla NSString, jest zaśmiecony + funkcjami i - funkcjami
Po prostu ciekawy: dlaczego ten wybór notacji?+/- wydaje mi się nieco hackowskie (prawdopodobnie dlatego, że przypomina mi to, jak perl używa "@", "#", "$" znaczy * coś *) –
Nie mogę wypowiedzieć się na temat wyboru notacji, ponieważ po prostu nie wiem ... Przepraszam. Może ktoś inny się dowie? – Jasarien
UML używa tej samej notacji. –