Как именно NSInvocation
работает? Есть хорошее введение?
У меня конкретно возникают проблемы с пониманием того, как работает следующий код (из Cocoa Programming для 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];
}
Я понимаю, что он пытается сделать. (Кстати, employees
это NSArray
особый Person
класс.)
Будучи специалистом по .NET, я пытаюсь связать незнакомые концепции Obj-C и Какао с примерно аналогичными концепциями .NET. Это похоже на концепцию делегата .NET, но нетипизировано?
Это не на 100% ясно из книги, поэтому я ищу что-то дополнительное от настоящих экспертов по Cocoa / Obj-C, снова с целью понять фундаментальную концепцию, лежащую в основе простого (-ish) примера. Я действительно ищу возможность самостоятельно применить полученные знания - до главы 9 у меня не было проблем с этим. Но сейчас ...
Заранее спасибо!
setArgument:atIndex:
, поэтому назначение arg должно фактически читать[myInvocation setArgument:&myString atIndex:2]
.