Jak dokładnie NSInvocation
działa? Czy jest dobre wprowadzenie?
Mam konkretnie problemy ze zrozumieniem, jak działa następujący kod (z Cocoa Programming for Mac OS X, 3rd Edition ), ale mogę również zastosować koncepcje niezależnie od przykładu samouczka. Kod:
- (void)insertObject:(Person *)p inEmployeesAtIndex:(int)index
{
NSLog(@"adding %@ to %@", p, employees);
// Add inverse of this operation to undo stack
NSUndoManager *undo = [self undoManager];
[[undo prepareWithInvocationTarget:self] removeObjectFromEmployeesAtIndex:index];
if (![undo isUndoing])
[undo setActionName:@"Insert Person"];
// Finally, add person to the array
[employees insertObject:p atIndex:index];
}
- (void)removeObjectFromEmployeesAtIndex:(int)index
{
Person *p = [employees objectAtIndex:index];
NSLog(@"removing %@ from %@", p, employees);
// Add inverse of this operation to undo stack
NSUndoManager *undo = [self undoManager];
[[undo prepareWithInvocationTarget:self] insertObject:p
inEmployeesAtIndex:index];
if (![undo isUndoing])
[undo setActionName:@"Delete Person"];
// Finally, remove person from array
[employees removeObjectAtIndex:index];
}
Rozumiem, co próbuje zrobić. (BTW, employees
jest klasą NSArray
niestandardową Person
.)
Będąc gościem .NET, staram się kojarzyć nieznane mi pojęcia Obj-C i Cocoa z z grubsza analogicznymi koncepcjami .NET. Czy jest to podobne do koncepcji delegata .NET, ale bez typu?
Nie jest to w 100% jasne z książki, dlatego szukam czegoś uzupełniającego od prawdziwych ekspertów od Cocoa / Obj-C, ponownie mając na celu zrozumienie podstawowej koncepcji pod prostym (-kawym) przykładem. Naprawdę chcę móc samodzielnie zastosować wiedzę - do rozdziału 9 nie miałem z tym żadnych trudności. Ale teraz ...
Z góry dziękuję!
setArgument:atIndex:
, więc przypisanie argumentu powinno faktycznie czytać[myInvocation setArgument:&myString atIndex:2]
.