Se vuoi dire perché non è possibile dichiarare una classe astratta e non solo la sua attuazione come una classe astratta, suppongo che sia perché non interagisce così bene con di Objective-C estremamente dinamiche, tipi-optional, Smalltalky stile di passaggio dei messaggi (Smalltalk non ha il supporto integrato per dichiararli). Per esempio:
Si potrebbe non sapere quale classe si invia alloc
o init
per, quindi sarebbe una garanzia piuttosto debole
sottoclassi potrebbe ancora bisogno di passare alloc
e init
la classe gerarchia, quindi dovremmo accettarlo, rendendolo una garanzia ancora più debole
Le categorie modificano le classi in fase di runtime, rendendo il contratto astratto ancora più debole
Alla fine, devi finire con una parola chiave che ha appena fatto o meno la stessa cosa che facciamo ora per implementare le classi astratte (vale a dire forse sovrascrivere lo init
su cauzione se il destinatario non è una sottoclasse).
I modificatori di tipo che specificano solo un contratto diventano più utili più ci si affida al sistema di tipi statici, ma Objective-C è stato progettato per non fare affidamento sul sistema di tipi tutto questo, quindi inserire il contratto nel sistema di tipi è meno utile che in altre lingue.