A meno che non manchi qualcosa, sembra arbitrario in quale file .h ho messo la definizione del protocollo. Mi sto anche chiedendo se potrebbe essere nel proprio file .h ... (in Java, è nel suo stesso file)protocollo obiettivo-c definito nel proprio file .h?
risposta
Penso che finché viene definito da qualche parte e incluso in uno dei file sei compilando, è definito. Non ci sono convenzioni come "ClassName.java" in Objective-C come in Java.
Questo è piuttosto utile quando si vogliono fare cose come categories per cose come metodi/proprietà privati.
In Objective-C è uguale. Perché un protocollo è un elenco di metodi condivisi tra le classi. Il protocollo è solo l'elenco dei metodi senza implementazioni corrispondenti. Sono pensati per essere implementati da qualcun altro.
I protocolli vengono in genere definiti nel proprio file .h (nella mia esperienza). Ma possono essere definiti in un file shared.h. Sarebbe difficile consentire agli utenti del protocollo di adottare il protocollo in una disposizione di file condivisa e, inoltre, ingombrerebbe la tua API. La documentazione e l'utilizzo sarebbero probabilmente più facili se il protocollo si trova nel proprio file .h.
Inoltre, l'utilizzo del protocollo per cose come le implementazioni polimorfiche avrebbe un sovraccarico minore se fosse sufficiente includere il file .h del protocollo anziché un file .h con altre dichiarazioni di classe. Non sono sicuro sulle esatte sui costi/risparmi di questa idea, ma ho letto ci sarebbe qualche (piccolo binario?)
saluti, Frank
Credo che il posizionamento del protocollo dipende come lo stai usando Un sacco di tempo, un protocollo viene utilizzato per definire la funzionalità di un delegato o di un'origine dati per un'altra classe. In questo caso, penso che si possa tranquillamente inserire la definizione del protocollo in cima all'altra classe, dal momento che sono destinati ad essere usati insieme.
Se si sta definendo un protocollo al posto di una classe base condivisa, è consigliabile inserirlo in un file separato. Ad esempio, ho diverse classi che implementano il protocollo "Operazione". Alcune delle mie altre funzioni prevedono di ricevere un oggetto che implementa il protocollo e non si preoccupano troppo delle classi effettive. In tal caso, ha senso inserire la definizione del protocollo nel proprio file di intestazione in modo da poterlo includere su di esso.
Benny ha ragione, tuttavia - sarà tecnicamente definito non importa dove lo si inserisce (purché sia incluso da qualche parte prima del suo utilizzo).
È davvero una questione di stile in Objective-C. Suppongo che il modo veramente "corretto" sia quello di creare un file .h separato per il protocollo, e se stavo realizzando un protocollo che non apparteneva ad altro (come NSCoding per esempio) è proprio quello che farei. D'altra parte, la maggior parte delle volte in cui creo un protocollo (o un protocollo informale, utilizzando una categoria su NSObject) è legato ad un'altra classe, come il protocollo informale di origine dati di NSTableView. In queste situazioni, ho semplicemente messo la dichiarazione nel file di intestazione di quella classe per semplicità.
Vedere anche Apple Communicating with Objects, che tratta delegati, protocolli e selettori. Sebbene sia elencato sotto Mac OS X, la maggior parte (se non tutti) sembra applicarsi anche a iOS.
- 1. (C++) Tutta la classe nel file .h?
- 2. Esiste un modo per definire la funzione inline C nel file .c anziché nel file .h?
- 3. Errore del compilatore Java: "tipo pubblico .. deve essere definito nel proprio file"?
- 4. Motivo per "{return 0;}" o "{;}" nel file .h della libreria
- 5. h: selectOneMenu con oggetto definito dall'utente
- 6. File di input mancante con protoc nel buffer di protocollo
- 7. Includere i file template/html nel proprio file binario
- 8. Riferimento non definito nel file makefile Linux
- 9. newbie che cerca di capire più @interface nel file .h
- 10. Devo creare ogni classe nel proprio file .py?
- 11. Come inserire il middleware nel proprio file in Node.js/Express.js
- 12. Eclipse non inserisce file XML nel proprio percorso di costruzione
- 13. Il protocollo di repository PHP Composer è definito?
- 14. d3dx11.h non nel kit Windows 8.0
- 15. dizionario nel buffer di protocollo
- 16. obiettivo c init nel protocollo
- 17. L'array JavaScript definito nel costruttore non è definito nel prototipo
- 18. Cosa significa la "h" nel documento oplog.rs?
- 19. Inizializzare una variabile con il proprio valore non definito
- 20. proprio layout definito, non il metodo OnDraw() sempre chiamato
- 21. File di configurazione proprio .NET
- 22. .h e .m file in Objective-c
- 23. Nessun tipo o di protocollo chiamato 'ReformerProtocol' in .h, ma .m funziona bene
- 24. 'dxerr9.h': Nessun file o directory
- 25. Nome stringa protocollo nel codice EADemo
- 26. Utilizzare Ninject DI nel proprio middleware OWIN
- 27. perché devo includere un file di intestazione .h nel file .c con lo stesso nome?
- 28. Perché usare i file .cpp se posso avere tutto il mio codice C++ nel file .h?
- 29. Ottenere "il prefisso 'soap' non è definito" nel file xslt
- 30. Come verificare se esiste un file nel percorso definito dall'utente?
stavo lavorando sulla revisione del codice in cui ho trovato un protocollo riscritto in numero di classi, ho creato un file separato per la definizione di protocol.but perso l'importazione di quel file. la tua risposta "(purché sia inclusa da qualche parte prima del suo utilizzo)." grazie + – Alok