Tam olarak nasıl NSInvocation
çalışır? İyi bir tanıtım var mı?
Özellikle aşağıdaki kodun ( Mac OS X için Cocoa Programlama, 3. Baskı ) nasıl çalıştığını anlama konusunda sorun yaşıyorum , ancak kavramları öğretici örnekten bağımsız olarak da uygulayabiliyorum. 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];
}
Ne yapmaya çalıştığını anladım. (Btw, employees
bir olan NSArray
özel bir bölgesinin Person
sınıfı).
Bir .NET adamı olarak, tanımadığım Obj-C ve Kakao kavramlarını kabaca benzer .NET kavramlarıyla ilişkilendirmeye çalışıyorum. Bu, .NET'in temsilci kavramına benzer, ancak türü yok mu?
Bu kitaptan% 100 net değil, bu yüzden gerçek Kakao / Obj-C uzmanlarından tamamlayıcı bir şey arıyorum, yine basit (-ish) örneğin altındaki temel konsepti anlıyorum. Gerçekten bilgiyi bağımsız olarak uygulayabiliyorum - bölüm 9'a kadar bunu yapmakta hiç zorluk çekmedim. Ama şimdi ...
Şimdiden teşekkürler!
setArgument:atIndex:
geçirmeniz gerekir, bu yüzden arg ödevi gerçekten okunmalıdır[myInvocation setArgument:&myString atIndex:2]
.