/ / L'obiettivo c supporta l'eredità privata del protocollo - obiettivo-c, obiettivo-c-categoria

L'obiettivo c supporta l'ereditarietà privata del protocollo - obiettivo-c, obiettivo-c-categoria

Un protocollo può essere ereditato privatamente in modo che nel livello di ereditarietà successivo non sia possibile accedervi?

risposte:

4 per risposta № 1

Objective-C non ha "eredità privata" (o "conformità privata") come fa C ++.

Puoi conformarti a un protocollo senza pubblicizzare la tua conformità nel file di intestazione. Ad esempio, puoi conformarti a NSCoding "Segretamente" se metti questo sopra il tuo @implementation dichiarazione nel tuo .m file:

@interface MyObject () <NSCoding>
@end

Quello dichiara a estensione di classe che aggiunge il NSCoding protocollo al MyObject classe.

Tuttavia, chiunque (inclusa una sottoclasse) può chiedere se si adotta il protocollo:

[[MyObject class] conformsToProtocol:@protocol(NSCoding)]
// returns YES

[[MySubObject class] conformsToProtocol:@protocol(NSCoding)]
// also returns YES, if MySubObject is a subclass of MyObject

e chiunque può inviare un NSCoding messaggio a un MyObject lanciando prima l'oggetto:

[(id<NSCoding>)someObject encodeWithCoder:someCoder]

E se crei una sottoclasse di MyObjecte anche la tua sottoclasse dichiara di essere conforme a NSCoding, quindi quasi certamente deve chiamare [super encodeWithCoder:] da solo encodeWithCoder: metodo.


0 per risposta № 2

No, non è possibile a causa del design del linguaggio.

Inoltre, poiché qualsiasi metodo potrebbe essere sovrascritto, non puoi mai essere sicuro che il tuo metodo chiamato sia della classe giusta.

Potrebbe esserci qualche hack che permette di farlo direttamente invocare il metodo che desideri, ma non è così facile e potrebbe anche non essere possibile.


0 per risposta № 3

Protocollo o altro, non è possibile impedire che i metodi vengano sovrascritti dalle sottoclassi

[Fonte]