I principi SOLID non necessariamente si applicano in qualsiasi contesto, indipendentemente dalla tecnologia o dal linguaggio di programmazione. Molti sviluppatori scelgono di rispettarli però, ed è certamente possibile farlo in Objective-C.
Se sei interessato a vedere il primo Objective-C di prova, dai un'occhiata a BrowseOverflow : è un test completo -app sviluppata che utilizza UIKit e servizi di rete. In realtà l'ho scritto come codice di esempio per Sviluppo iOS Test-driven , ma se sei a tuo agio con i principi puoi semplicemente guardare il codice. Puoi vedere che anche se il codice è stato testato, non è ricco di protocolli.
Una ragione è "digitazione anatra". Objective-C, come Smalltalk prima e dopo Ruby, non si preoccupa di che tipo è un oggetto, semplicemente manda messaggi. Il sistema di sicurezza del tipo è interamente limitato al controllo del compilatore. È quindi possibile digitare una variabile nel modo specifico che si desidera e ancora (a volte con un casting) fornire un tipo diverso in fase di esecuzione. Finché entrambi i tipi rispondono ai messaggi passati nel tuo codice, tutto funziona. Puoi vedere che i test di BrowseOverflow lo usano per passare i falsi test, anche per le variabili che non sono state digitate usando i protocolli.
Infatti negli Objective-C storici e Smalltalk (e nel moderno Ruby) molti oggetti collaborativi non sono affatto digitati: in Objective-C il tipo id
significa "qualsiasi oggetto". Questo è meno comune ora in ObjC, ma un sacco di codice framework di Apple è abbastanza vecchio per essere stato in giro quando questa era la norma. Noterai che i framework più recenti e le API più recenti su framework esistenti utilizzano tipi di protocollo e di tipizzazione più stringenti per i collaboratori non delegati.
Is there a reason why an ObjC developer would only use protocols for delegates?
Scelta personale. Non c'è alcun motivo tecnico di base per seguire questo approccio.
Does SOLID programming apply for ObjC?
Sì. O meglio, può farlo, e molti sviluppatori scelgono di seguire i principi SOLID.