Come funziona esattamente NSInvocation
? C'è una buona introduzione?
In particolare ho problemi a capire come funziona il seguente codice (da Cocoa Programming per Mac OS X, 3a edizione ), ma poi posso anche applicare i concetti indipendentemente dall'esempio del tutorial. Il codice:
- (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];
}
Ho capito cosa sta cercando di fare. (A proposito, employees
è NSArray
di una Person
classe personalizzata .)
Essendo un ragazzo di .NET, cerco di associare concetti Obj-C e Cocoa non familiari a concetti di .NET approssimativamente analoghi. È simile al concetto delegato di .NET, ma non tipizzato?
Questo non è chiaro al 100% dal libro, quindi sto cercando qualcosa di supplementare da veri esperti di Cocoa / Obj-C, sempre con l'obiettivo di comprendere il concetto fondamentale sotto il semplice esempio (-ish). Sto davvero cercando di essere in grado di applicare autonomamente le conoscenze - fino al capitolo 9, non avevo difficoltà a farlo. Ma ora ...
Grazie in anticipo!
setArgument:atIndex:
, quindi l'assegnazione arg dovrebbe effettivamente leggere[myInvocation setArgument:&myString atIndex:2]
.