NSException in init quando si dispone di un inizializzatore personalizzato designato?

0

Ho un controller di visualizzazione personalizzato che è una sottoclasse di UIViewController che richiede che un oggetto dati sia impostato correttamente. Senza questo oggetto, mostrare il VC non ha alcun senso. Così ho creato un inizializzatore personalizzato che richiede che questo oggetto venga passato come parametro / argomento. Non esiste anche un oggetto dati "predefinito", quindi non ho alcun motivo di sovrascrivere l'init ereditato e implementare il passaggio di questo oggetto dati predefinito internamente da init a init personalizzato.

Invece sto sollevando un'eccezione che spiega che è necessario aggiungere un oggetto nell'inizializzatore personalizzato designato invece di usare il metodo init ereditato.

Tuttavia, i miei colleghi obiettano che dovrei semplicemente restituire nil nello standard init sovrascritto. Comunque non mi stanno dando alcuna argomentazione adeguata, mi dicono solo che questa è la convenzione. Quale non è un argomento per me in senso stretto. Non farò le cose solo perché sono tradizione.

Perché restituire nil e perché sollevare un'eccezione personalizzata è sbagliato?

    
posta Earl Grey 20.06.2013 - 12:21
fonte

1 risposta

0

La convenzione sulle piattaforme è importante. È come puoi passare da una base di codice a un'altra con il minimo sforzo. Il nuovo codice dovrebbe essere nominato e dovrebbe comportarsi nel modo più prevedibile possibile.

Non si dovrebbe avere una sola classe, per esempio, in un programma Java che usa underscore nel suo metodo e nomi di variabili piuttosto che in cammello. Sono sicuro che non avresti infranto la regola che , ma è anche solo una convenzione.

La convenzione ha un ruolo ancora più importante in Cocoa quando usi ARC. I nomi dei metodi sono usati per aiutare a gestire la memoria - Apple ha preso una convenzione e l'ha trasformata in una regola.

Il tuo caso di eccezione è simile. La maggior parte dei programmatori di Cocoa non si aspetterebbe che un programma Cocoa generi un'eccezione nel suo metodo init . La convenzione è che restituisce nil in caso di errore.

C'è sicuramente un motivo per rompere regole e convenzioni, ma devi stare attento e farlo solo in circostanze davvero eccezionali. Una classe con una proprietà obbligatoria è un caso piuttosto comune e non uno, penso, che meriti di infrangere la convenzione.

    
risposta data 20.06.2013 - 14:57
fonte

Leggi altre domande sui tag