mia comprensione è che i protocolli sono come interfacce in altre lingue - dichiarano i metodi previsti - (. Forse anche tipi non si è proprietari), mentre le categorie consentono di aggiungere nuovi metodi per esistenti tipiPerché l'SDK dell'iPhone utilizza categorie, piuttosto che protocolli, per alcuni delegati?
Perché, allora , l'SDK dell'iPhone a volte utilizza categorie per la dichiarazione dei tipi di delegati? Normalmente mi aspetterei che tutti i delegati vengano digitati id <MyDelegateProtocol> ma ci sono molti esempi in cui questo non è il caso.
Ad esempio, vedere NSURLConnection. Il suo delegato è digitato "id" e il "contratto" è dichiarato come categoria su NSObject (NSURLConnectionDelegate).
Quindi: qual è la motivazione per l'utilizzo di categorie in questi casi?
Questa era la mia ipotesi, ma non lo sapevo per certo. Grazie! –
Aspettatevi di vedere la modifica dei protocolli che arriva molto presto, però. Ora che sono consentiti metodi di protocollo opzionali, l'utilizzo di questi ripulirà un po 'il codice e libererà molte categorie ormai inutili. (Sono fantastici e tutto, ma invece di applicare metodi su NSObject in fase di esecuzione, penso che avere un delegato implementare un protocollo sia molto più pulito, sia concettualmente che dal punto di vista runtime.) –