Come usare il metodo self class su iPhone? (domanda concettuale)
-
03-07-2019 - |
Domanda
Scrivo un metodo di istanza in ClassName.m:
-(void)methodName:(paraType)parameter
{...}
E chiamalo usando
[self methodName:parameter];
Verrà visualizzato un avviso, ma il codice verrà comunque eseguito correttamente.
È perché non ho creato un'istanza della classe? Perché il metodo funziona ancora normalmente? E qual è il modo corretto di chiamare il metodo self per prevenire l'avvertimento?
Soluzione
Bene, il primo passo per ricevere aiuto con un avviso sarebbe di pubblicare l'avviso :)
Suppongo sia qualcosa che riguarda un messaggio non riconosciuto? In tal caso è perché nonostante il compilatore veda la chiamata a " methodName " non sa se questo è valido per l'oggetto oppure no.
Immagino che il tuo codice assomigli;
-(void) someFunc
{
...
[self methodName:parameter];
...
}
-(void)methodName:(paraType)parameter
{
...
}
Puoi anche;
a) Posiziona la funzione 'methodName' prima nel file in modo che il compilatore l'abbia vista prima che venga usata nelle chiamate.
b) dichiaralo nell'interfaccia della classe. Per es.
// Foo.h
@interface Foo {
...
}
-(void) methodName:(paraType)parameter;
@end
Altri suggerimenti
Qual è l'avviso che ricevi?
Hai una definizione del metodo nel tuo file di intestazione?
La sintassi che usi è il modo più efficace di chiamare il metodo su se stesso.
Il metodo funzionerà perché i metodi Objective-C vengono risolti in fase di esecuzione. Mi aspetto che l'avviso che ricevi sia simile a " Oggetto Foo potrebbe non rispondere a -methodName: " e poi ti dice che sta impostando il tipo di ritorno su id
. Questo perché il compilatore non ha visto una dichiarazione o una definizione di -methodName:
al momento in cui compila il codice dove lo chiami. Per rimuovere l'avviso, dichiarare il metodo nell'interfaccia della classe o in una categoria della classe.
Se ricevi un avviso potrebbe essere perché la firma del metodo non è in un'interfaccia.
@interface foo ....
-(void)method;
Una volta scritta l'implementazione, l'avviso dovrebbe sparire poiché non è la prima volta che il compilatore vede il metodo. Funzionerà senza farlo, ma il messaggio di avviso è fastidioso.