【问题标题】:Meaning of symbol ^ in Objective C [duplicate]Objective C中符号^的含义[重复]
【发布时间】:2011-11-10 09:43:07
【问题描述】:

可能重复:
Caret in objective C
What does this ^ syntax mean in Objective-C?

我厌倦了在 Objective C 中搜索符号 ^ 的含义。我在很多项目中都看到过它,尤其是在后台运行任务中。我会放一个链接 http://developer.apple.com/library/ios/#samplecode/StitchedStreamPlayer/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010092MyStreamingMovieViewController.m 中,您可以在里面找到以下内容 - (IBAction)endScrubbing:(id)sender method

timeObserver = [[player addPeriodicTimeObserverForInterval:CMTimeMakeWithSeconds(tolerance, NSEC_PER_SEC) queue:dispatch_get_main_queue() usingBlock:
                         ^(CMTime time)
                         {
                             [self syncScrubber];
                         }] retain];
    }

还有http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html

- (void)applicationDidEnterBackground:(UIApplication *)application
{
UIApplication*    app = [UIApplication sharedApplication];

bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
    // Clean up any unfinished task business by marking where you.
    // stopped or ending the task outright.
    [app endBackgroundTask:bgTask];
    bgTask = UIBackgroundTaskInvalid;
}];

// Start the long-running task and return immediately.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    // Do the work associated with the task, preferably in chunks.

    [app endBackgroundTask:bgTask];
    bgTask = UIBackgroundTaskInvalid;
});
}

请告诉我答案。

【问题讨论】:

  • @chx:与那个问题完全一样
  • @rakeshNS:符号^ 被称为“插入符号”。如果您在 Google 中搜索“^ objective-c”,您将得不到有用的结果。如果你搜索“caret objective-c”,你会得到相当多的信息。
  • @JeremyP 我知道,我在找到它后将其标记为重复。
  • @JeremyP 感谢您的发现。事情就是这样发生的

标签: iphone objective-c ios objective-c-blocks background-process


【解决方案1】:

该符号用于声明块。

更多信息请阅读这里Blocks Programming Topics

更多信息:

块对象是 C 级语法和运行时特性。他们是 类似于标准 C 函数,但除了可执行代码 它们还可能包含与自动(堆栈)或 托管(堆)内存。因此,一个块可以保持一组状态 (数据)可用于在执行时影响行为。

您可以使用块来组成可以传递的函数表达式 到 API,可选地存储,并由多个线程使用。块是 作为回调特别有用,因为该块同时带有 要在回调上执行的代码以及在此期间所需的数据 执行。

【讨论】:

  • 很好的链接,但答案本身不包含任何信息。如果您能解释一下block 是什么,那就太好了。
  • 添加了更多信息,但它是从参考文档中复制粘贴的。
  • @Johan:鉴于 Nekto 的回答,该回答发布在我之前,并链接到同一文档的第一页,而我引用的专门回答您的问题的文本位于第二页的顶部页面,您在这里并没有很努力地理解您的问题的答案......
  • @DuncanBabbage,这不是我的问题 :-)
  • @Johan...哎呀!我的错。 :)
【解决方案2】:

该符号用于声明块。块是内联实现的代码的可寻址部分(在其他函数内部)。内联可能很方便,但块与常规函数和函数指针不同的真正原因是它们可以从围绕其实现的函数范围引用局部变量,而块的调用者不需要知道周围的范围变量的存在。
How blocks are implemented (and the consequences)

【讨论】:

    【解决方案3】:

    来自Apple's Blocks Programming Topics第二页:

    您使用 ^ 运算符来声明块变量并指示块文字的开头。块本身的主体包含在 {} 中,如本例所示(与 C 一样,; 表示语句的结尾):

    【讨论】:

    • 苹果关于blocks的描述现在位于here
    • 感谢 Cap,已修复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 2014-01-18
    • 2011-11-19
    相关资源
    最近更新 更多