Domanda

Voglio installare un tavolo Metodo spedizione e mi chiedo se è possibile creare puntatore a un metodo in Objective-C (come puntatore a funzione in C). Ho cercato di usare alcune funzioni Objective-C di runtime per passare in modo dinamico i metodi ma il problema è che interesserà tutte le istanze.

Sono molto nuovo per Objective-C, un esempio illustrato sarebbe molto apprezzato.

È stato utile?

Soluzione

metodi Objective-C sono chiamati selectors, e sono rappresentati dal tipo di dati SEL. Se il vostro oggetto eredita da NSObject, si può dire che per eseguire un selettore (vale a dire chiamare un metodo), come in tal modo:

SEL selector = @selector(doSomething:);
[obj performSelector:selector withObject:argument];

Questo presuppone che un metodo definito come:

-(void)doSomething:(MyObject*)arg;

I selettori sono assegnati a SEL tipi di dati attraverso la parola @selector, che prende il nome del metodo che si desidera conservare. Il nome del metodo è il nome del metodo spogliato di tutti gli argomenti. Ad esempio:

-(void)doSomething:(MyObject*)arg withParams:(MyParams*)params

dovrebbe essere indicata come @selector(doSomething:withParams:).

Altri suggerimenti

Sì! In Objective-C, i puntatori a funzione sono chiamati selettori. Se è stato un metodo definito in questo modo:

- (void)myFunctionWithObject:(NSObject*)obj otherObject:(NSNumber*)obj2
{
}

Il selettore è dichiarato in questo modo:

@selector(myFunctionWithObject:otherObject:)

Per eseguire un selettore su un oggetto, è possibile utilizzare:

[object performSelector:@selector(myFunction)];

o

[object performSelector:@selector(myFunctionTakingParameter:) withObject: o];

Il tipo di dati di selezione è particolarmente utile per le discussioni e timer, in cui è possibile inviare un filo e fornire un selettore per il messaggio che vuoi a invocare. Se è necessario creare una matrice di selettori (o una tabella della spedizione), o se avete bisogno di invocare selettori con più parametri, è possibile utilizzare la classe NSInvocation. Esso fornisce un wrapper per un selettore e consente di specificare gli argomenti attuali.

Si dovrebbe tenere a mente che Objective-C si basa già su un tavolo metodo di spedizione completamente dinamico. Suona come il mantenimento di puntatori a funzione utilizzando i selettori funzionerà bene per voi se avete solo bisogno di un riferimento a una funzione, però.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top