/ / Czy delegaci naprawdę są kategoriami w Objective-C? - cel-c, delegaci, kategorie

Czy delegaci naprawdę są kategoriami w Objective-C? - cel-c, delegaci, kategorie

Próbuję zrozumieć nieformalne protokoły, do tej pory wiem, że nieformalne protokoły są rodzajem kategorii, ale dlaczego delegaci nie mają nazwy kategorii?

Przykład:

#import <Cocoa/Cocoa.h>

@class FileSystemNode;

@interface AppController : NSObject { // Where is the Category ????
@private
IBOutlet NSBrowser *_browser;
FileSystemNode *_rootNode;
}

@end

Dzięki.

Odpowiedzi:

1 dla odpowiedzi № 1

Nieformalne protokoły są nie "rodzaj kategorii".

Jeśli klasa jest zgodna z protokołem (na przykład @interface MyClass <MyProtocol>) jest gwarantowane, że możesz wywołać wszystkie metody tej klasy, które są wymagane przez MyProtocol. (O ile klasa naprawdę ich nie implementuje [linker nie może tego wiedzieć z powodu dynamicznego wiązania], który jest błędem programistycznym i kłamstwem, ale zazwyczaj tak nie jest.)

Kategorie z drugiej strony pozwalają ci wziąć już istniejącą klasę i rozszerzyć ją o nowe metody (np removeAllSubviews metoda do już istniejącego NSView klasa).


Tak więc kategorie i protokoły są zupełnie przeciwne sobie.