Как работает NSInvocation
? Есть ли хорошее представление?
В частности, у меня возникают проблемы с пониманием того, как работает следующий код (от Cocoa Programming for Mac OS X, 3rd Edition), но затем также можно применять понятия независимо от образца учебника. Код:
- (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];
}
Я получаю то, что он пытается сделать. (BTW, employees
является NSArray
пользовательского класса Person
.)
Будучи человеком .NET, я пытаюсь связать незнакомые концепции Obj-C и Cocoa с примерно аналогичными понятиями .NET. Это похоже на концепцию делегата .NET, но нетипизируется?
Это не 100% ясно из книги, поэтому я ищу что-то дополнительное от реальных экспертов Cocoa/Obj-C, опять же с целью, чтобы я понял фундаментальную концепцию под простым (-ish) примером. Я действительно стараюсь самостоятельно применять знания до 9-й главы, мне это не сложно. Но теперь...
Спасибо заранее!