Просто добавьте немного больше, количество символов, возвращаемых printf()
, может зависеть от спецификаторов параметров
ex:
int a= 0xff;
printf(" : %i characters\n" ,printf("%x",a)); //prints ff : 2 characters
printf(" : %i characters\n" ,printf("%d",a)); //prints 255 : 3 characters
Вот то, что я раньше называл тем, что я не мог изменить с помощью NSInvocation:
SEL theSelector = NSSelectorFromString(@"setOrientation:animated:");
NSInvocation *anInvocation = [NSInvocation
invocationWithMethodSignature:
[MPMoviePlayerController instanceMethodSignatureForSelector:theSelector]];
[anInvocation setSelector:theSelector];
[anInvocation setTarget:theMovie];
UIInterfaceOrientation val = UIInterfaceOrientationPortrait;
BOOL anim = NO;
[anInvocation setArgument:&val atIndex:2];
[anInvocation setArgument:&anim atIndex:3];
[anInvocation performSelector:@selector(invoke) withObject:nil afterDelay:1];
Просто заключите float, boolean, int или аналогичные в NSNumber.
Для структур я не знаю удобного решения, но вы можете создать отдельный класс ObjC, который владеет такая структура.
Возможно, NSValue , просто убедитесь, что ваши указатели все еще действительны после задержки (т. Е. Нет объектов, размещенных в стеке).
Можно просто использовать NSTimer для вызова селектора:
[NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(yourMethod:) userInfo:nil repeats:NO]
Возможно... хорошо, очень вероятно, я что-то упускаю, но почему бы просто не создать объектный тип, скажем NSNumber, как контейнер для переменной не-объектного типа, например CGFloat?
CGFloat myFloat = 2.0;
NSNumber *myNumber = [NSNumber numberWithFloat:myFloat];
[self performSelector:@selector(MyCalculatorMethod:) withObject:myNumber afterDelay:5.0];