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.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow