iOS
NSInvocation
Zoeken…
NSInvocation Doelstelling-C
Verwijs naar dit originele bericht door e.James
Volgens de NSInvocation-klassenreferentie van Apple :
Een
NSInvocation
is een Objective-C bericht dat statisch wordt gemaakt, dat wil zeggen, het is een actie die wordt omgezet in een object.
En, in iets meer detail:
Het concept van berichten staat centraal in de doelstelling-c filosofie. Telkens wanneer u een methode aanroept of een variabele van een object opent, stuurt u er een bericht naar. NSInvocation
is handig wanneer u een bericht naar een object op een ander tijdstip wilt verzenden of hetzelfde bericht meerdere keren wilt verzenden. NSInvocation
kunt u het bericht beschrijven dat u gaat verzenden en het later oproepen (in feite naar het doelobject verzenden).
Laten we bijvoorbeeld zeggen dat u een string aan een array wilt toevoegen. Normaal gesproken verzendt u het bericht addObject:
als volgt:
[myArray addObject:myString];
Stel dat u NSInvocation
wilt gebruiken om dit bericht op een ander tijdstip te verzenden:
Ten eerste zou je een bereiden NSInvocation
object voor gebruik met NSMutableArray
's addObject:
selector:
NSMethodSignature * mySignature = [NSMutableArray
instanceMethodSignatureForSelector:@selector(addObject:)];
NSInvocation * myInvocation = [NSInvocation
invocationWithMethodSignature:mySignature];
Vervolgens geeft u op naar welk object het bericht moet worden verzonden:
[myInvocation setTarget:myArray];
Geef het bericht op dat u naar dat object wilt verzenden:
[myInvocation setSelector:@selector(addObject:)];
En vul eventuele argumenten voor die methode in:
[myInvocation setArgument:&myString atIndex:2];
Merk op dat objectargumenten door de aanwijzer moeten worden doorgegeven. Bedankt aan Ryan McCuaig voor het aangeven van dit, en raadpleeg de documentatie van Apple voor meer informatie.
Op dit moment is myInvocation
een compleet object dat een bericht beschrijft dat kan worden verzonden. Om het bericht daadwerkelijk te verzenden, belt u:
[myInvocation invoke];
Bij deze laatste stap wordt het bericht verzonden en wordt in wezen [myArray addObject:myString];
.
Zie het als het sturen van een e-mail. U opent een nieuwe e-mail ( NSInvocation
object), vult het adres in van de persoon (het object) NSInvocation
u het wilt verzenden, typt een bericht voor de ontvanger (geef een selector
en argumenten op) en klik vervolgens op "verzenden" (oproep invoke
).
Zie NSInvocation gebruiken voor meer informatie.
NSUndoManager
gebruikt NSInvocation
objecten zodat opdrachten kunnen worden omgekeerd . Wat u in wezen doet, is een NSInvocation
object maken om te zeggen: "Hé, als u ongedaan wilt maken wat ik net heb gedaan, stuur dit bericht dan naar dat object met deze argumenten". U geeft het NSInvocation
object aan de NSUndoManager
en het voegt dat object toe aan een reeks ongedaan te maken acties. Als de gebruiker "Ongedaan maken" NSUndoManager
, zoekt NSUndoManager
eenvoudig de meest recente actie in de array op en roept het opgeslagen NSInvocation
object op om de benodigde actie uit te voeren.
Zie Ongedaan maken registreren voor meer informatie.