我正在学习目标c和swift。我没有得到目标c或Swift中块和方法或函数之间的区别。
int mutiplier=10;
int (^myBlock)(void)=^{
return 10 *3;
};
NSLog(@"%d",myBlock());
或者可以像这样编写方法/功能
-(int)function:(int)num{
return num* 10;
}
块引用
答案 0 :(得分:1)
简短而简单:
代码块 - 只是一段代码。您可以声明它,定义块的类型(然后创建实例),逐个调用块等。块可以获取参数,可以返回一些东西,使用它们和Grand Central Dispatch非常方便。块可以在代码中间,作为实例变量或属性声明。它们也可以作为参数传递给方法/函数调用。在块完成其工作后,您可以调用“完成”。部分运行一些特定的代码,在某些情况下很方便。在一个类似于块(但不相等)的快速语言中,事物是一个闭包。想补充一点,Objective-c中有一种基于块的枚举方法,几乎与快速枚举一样快。对于大多数情况,建议快速枚举,但有时(罕见)块枚举更好。其他循环通常不如这两个循环快。我们应该记住的另一个重要事情是块是Objective-C对象,而函数和方法不是。块可以从封闭范围的变量中捕获值,同时在函数/方法中获取相同的值,您需要将这些变量作为参数传递。使用块甚至可以使用f.e.更改这些变量。
__block int anInteger = 123;
块调用前的语法。
请记住,在块中捕获它时,请避免强烈引用self
以避免保留周期。在这种情况下使用weakSelf
。
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithBlocks/WorkingwithBlocks.html
功能应该有名称,返回或无效。
方法是一个类的功能。
答案 1 :(得分:0)
块是一种包装代码并有效存储以供以后使用的方法。通常使用块来代替回调函数。 iPhone SDK中较新的API使用这种方式阻止。 API将采用它将在完成时运行的代码“块”。并且块作为关闭以快速方式呈现。
在swift中,学习闭包的语法难度很小。但是相信我,当你开始使用它时,这是非常方便的。
它可以节省您必须创建自己的线程并维护每个线程的状态,管理锁,设置自动释放池等。
此外,当与Grand Central Dispatch(GCD)一起使用时,API块可以在队列上运行,并且可以使用非常少的工作异步运行代码的整个部分,但仍然保持多线程代码所需的健壮性。