Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在目标c中调用适当的函数_Objective C_Cocoa - Fatal编程技术网

Objective c 在目标c中调用适当的函数

Objective c 在目标c中调用适当的函数,objective-c,cocoa,Objective C,Cocoa,我想在适当的位置定义一个选择器。我怎样才能做到 i、 e.我想这样做: [self performSelector:@selector( function() {variable = 3;} ) withObject:self afterDelay:3]; 其中,变量是调用函数的类的int。考虑使用: 苹果为许多操作提供了基于块的API,在过去,@selector回调是唯一的选项。请注意,块仅在iOS 4.0及更新版本中可用(尽管存在允许在较旧的iOS版本中使用基于块的代码) 编辑:添加了

我想在适当的位置定义一个选择器。我怎样才能做到

i、 e.我想这样做:

 [self performSelector:@selector( function() {variable = 3;} ) withObject:self afterDelay:3]; 
其中,
变量
是调用函数的类的int。

考虑使用:

苹果为许多操作提供了基于块的API,在过去,@selector回调是唯一的选项。请注意,块仅在iOS 4.0及更新版本中可用(尽管存在允许在较旧的iOS版本中使用基于块的代码)

编辑:添加了一个在给定时间后调用块的更“真实”的示例:

dispatch_time_t  delay = dispatch_time(DISPATCH_TIME_NOW, 3 * NSEC_PER_SEC);
dispatch_queue_t queue = dispatch_get_main_queue();
dispatch_after(delay, queue, ^{variable = 3});

请注意,此示例使用的方法也仅适用于iOS 4.0及更高版本。

对于GCD为此类非平凡任务所涉及的额外工作,您还可以创建一个单独的方法:

- (void) setVariable:(NSNumber *) value
{
    variable = [value intValue];
}

- (void) someOtherMethod
{
    [self performSelector:@selector(setVariable:) withObject:[NSNumber numberWithInt:3] afterDelay:3.0];
}

您可以使用blocks或GCD,但这为您提供了一个解决方案以及向后兼容性。唯一的缺点是
性能选择器:withObject:afterDelay:
没有最佳分辨率(例如,它可能在3.2秒后执行,等等)。

试试这个:

[[NSOperationQueue mainQueue] addOperationWithBlock:^{
    // Insert code here
}];

您可以看看Block,它肯定是通向解决方案的路径。但是,按照OP的建议,您将如何在
性能选择器:withObject:afterDelay:
方法中使用上述块(不在
printf
),而不是调用
性能选择器:withObject:afterDelay:
,您可以使用Grand Central Dispatch(这也是一个iOS>=4.0功能)这样写:
dispatch\u time\u t delay=dispatch\u time(dispatch\u time\u NOW,seconds*NSEC\u PER\u second);dispatch_queue_t queue=dispatch_get_main_queue();调度(延迟、队列、阻塞)
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
    // Insert code here
}];