在目标c或Swift中,函数/方法和块之间有什么区别

时间:2017-06-01 12:20:54

标签: ios objective-c swift objective-c-blocks

我正在学习目标c和swift。我没有得到目标c或Swift中块和方法或函数之间的区别。

int mutiplier=10;

int (^myBlock)(void)=^{

    return 10 *3;
};
NSLog(@"%d",myBlock());

或者可以像这样编写方法/功能

-(int)function:(int)num{

    return num* 10;
}
  

块引用

2 个答案:

答案 0 :(得分:1)

简短而简单:

  1. 代码块 - 只是一段代码。您可以声明它,定义块的类型(然后创建实例),逐个调用块等。块可以获取参数,可以返回一些东西,使用它们和Grand Central Dispatch非常方便。块可以在代码中间,作为实例变量或属性声明。它们也可以作为参数传递给方法/函数调用。在块完成其工作后,您可以调用“完成”。部分运行一些特定的代码,在某些情况下很方便。在一个类似于块(但不相等)的快速语言中,事物是一个闭包。想补充一点,Objective-c中有一种基于块的枚举方法,几乎​​与快速枚举一样快。对于大多数情况,建议快速枚举,但有时(罕见)块枚举更好。其他循环通常不如这两个循环快。我们应该记住的另一个重要事情是块是Objective-C对象,而函数和方法不是。块可以从封闭范围的变量中捕获值,同时在函数/方法中获取相同的值,您需要将这些变量作为参数传递。使用块甚至可以使用f.e.更改这些变量。

    __block int anInteger = 123; 
    
    块调用前的

    语法。 请记住,在块中捕获它时,请避免强烈引用self以避免保留周期。在这种情况下使用weakSelfhttps://developer.apple.com/library/content/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithBlocks/WorkingwithBlocks.html

  2. 功能应该有名称,返回或无效。

  3. 方法是一个类的功能。

答案 1 :(得分:0)

块是一种包装代码并有效存储以供以后使用的方法。通常使用块来代替回调函数。 iPhone SDK中较新的API使用这种方式阻止。 API将采用它将在完成时运行的代码“块”。并且块作为关闭以快速方式呈现。

在swift中,学习闭包的语法难度很小。但是相信我,当你开始使用它时,这是非常方便的。

它可以节省您必须创建自己的线程并维护每个线程的状态,管理锁,设置自动释放池等。

此外,当与Grand Central Dispatch(GCD)一起使用时,API块可以在队列上运行,并且可以使用非常少的工作异步运行代码的整个部分,但仍然保持多线程代码所需的健壮性。