Nie rozumiem, dlaczego musimy wywoływać metodę setSelector
na obiektach NSInvocation
, gdy informacje te są już przekazywane za pośrednictwem invocationWithMethodSignature
.Jaki jest cel metody setSelector w klasie NSInvocation?
Aby utworzyć NSInvocation
obiektu możemy wykonać następujące czynności:
SEL someSelector;
NSMethodSignature *signature;
NSInvocation *invocation;
someSelector = @selector(sayHelloWithString:);
//Here we use the selector to create the signature
signature = [SomeObject instanceMethodSignatureForSelector:someSelector];
invocation = [NSInvocation invocationWithMethodSignature:signature];
//Here, we again set the same selector
[invocation setSelector:someSelector];
[invocation setTarget:someObjectInstance];
[invocation setArgument:@"Loving C" atIndex:2];
Zauważ, że minęliśmy wybieraka [SomeObject instanceMethodSignatureForSelector: someSelector];
i znowu [invocation setSelector:someSelector];
.
Czy jest coś, czego mi brakuje?
+1 - Dobrze jest zobaczyć tutaj pytanie, które nie było już zadawane (i odpowiadać) już milion razy, i nie jest napisane w żargonie błyskawicznym, który jest nieczytelny. :-) –
Jeden mały punkt: 'signature = [SomeObject instanceMethodSignatureForSelector: someSelector];' powinno być 'signature = [[SomeObject class] instanceMethodSignatureForSelector: someSelector]; lub signature = [SomeObject methodSignatureForSelector: someSelector]; ' – Brynjar