Sök…


NSInvocation Objekt-C

Se det här originalet från e.James

Enligt Apples NSInvocation-klassreferens :

En NSInvocation är ett Objekt-C-meddelande som görs statiskt, det vill säga det är en handling som förvandlas till ett objekt.

Och i lite mer detalj:

Begreppet meddelanden är centralt i objektiv-c-filosofin. Varje gång du ringer till en metod eller öppnar en variabel av något objekt skickar du ett meddelande. NSInvocation är praktiskt när du vill skicka ett meddelande till ett objekt vid en annan tidpunkt eller skicka samma meddelande flera gånger. NSInvocation låter dig beskriva meddelandet du ska skicka och sedan åkalla det (skicka det faktiskt till målobjektet) senare.


Låt oss till exempel säga att du vill lägga till en sträng i en matris. Du skickar normalt addObject: -meddelandet enligt följande:

[myArray addObject:myString];

Låt oss nu säga att du vill använda NSInvocation att skicka detta meddelande vid någon annan tidpunkt:

Först skulle du förbereda ett NSInvocation objekt för användning med NSMutableArray addObject: selector:

NSMethodSignature * mySignature = [NSMutableArray
    instanceMethodSignatureForSelector:@selector(addObject:)];
NSInvocation * myInvocation = [NSInvocation
    invocationWithMethodSignature:mySignature];

Därefter anger du vilket objekt du vill skicka meddelandet till:

[myInvocation setTarget:myArray];

Ange meddelandet du vill skicka till det objektet:

[myInvocation setSelector:@selector(addObject:)];

Och fyll i alla argument för den metoden:

[myInvocation setArgument:&myString atIndex:2];

Observera att objektargument måste skickas av pekaren. Tack till Ryan McCuaig för att du påpekade det och se Apples dokumentation för mer information.

Just myInvocation är myInvocation ett komplett objekt som beskriver ett meddelande som kan skickas. För att faktiskt skicka meddelandet skulle du ringa:

[myInvocation invoke];

Det sista steget kommer att få meddelandet att skickas, i huvudsak kör [myArray addObject:myString]; .

Tänk på det som att skicka ett e-postmeddelande. Du öppnar ett nytt e-postmeddelande ( NSInvocation objekt), fyller i adressen till personen (objektet) som du vill skicka det till, skriver in ett meddelande för mottagaren (ange en selector och argument) och klickar sedan på "skicka" (samtals invoke ).

Se Använda NSInvocation för mer information.


NSUndoManager använder NSInvocation objekt så att det kan vända kommandon. Vad du gör är att skapa ett NSInvocation objekt för att säga: "Hej, om du vill ångra det jag just gjorde, skicka det här meddelandet till det objektet med dessa argument". Du ger NSInvocation objektet till NSUndoManager , och det lägger till det objektet till en rad oåtkomliga handlingar. Om användaren kallar "Ångra" NSUndoManager helt enkelt upp den senaste åtgärden i arrayen och åkallar det lagrade NSInvocation objektet för att utföra nödvändig åtgärd.

Mer information finns i Registrera ångra operationer .



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow