iOS
NSInvocation
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 .