2009-06-05 19 views

risposta

3

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.

-1

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.

3

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

19

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).

+0

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

0

È 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à.

0

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.

Problemi correlati