Я изучаю цель c и быстро. я не понял, какая разница между блоком и методом или функцией в Objective c или Swift.
int mutiplier=10;
int (^myBlock)(void)=^{
return 10 *3;
};
NSLog(@"%d",myBlock());
Или можете написать метод/функцию, подобную этой
-(int)function:(int)num{
return num* 10;
}
Blockquote
Короткие и простые:
Блок кода - всего лишь блок кода. Вы можете объявить об этом, определить типы блоков (затем создать экземпляры), блоки вызовов по одному и т.д. Блоки могут принимать параметры, могут что-то возвращать, довольно удобно использовать их вместе с Grand Central Dispatch. Блоки могут быть объявлены прямо в середине кода, как переменная экземпляра или как свойство. Они также могут передаваться как аргументы вызова метода/функции. После того, как блок выполнил свою работу, вы можете вызвать часть "завершения" для запуска определенного кода, что удобно в некоторых случаях. В быстром языке, подобном блокам (но не равным), это закрытие. Хотелось бы добавить, что в Objective-c существует подход к подсчету на основе блоков, который почти так же быстро, как и быстрое перечисление. Порекомендовал бы быстрое перечисление в большинстве случаев, но иногда (редкое) перечисление блоков лучше. Другие циклы обычно происходят не так быстро, как эти два. Еще одна важная вещь, которую мы должны иметь в виду, состоит в том, что блоки являются объектами Objective-C, а функции и методы - нет. Блоки могут захватывать значения из переменных из охватывающей области, а для получения тех же значений внутри функции/метода, которые необходимо передать этим переменным в качестве аргументов. Используя блоки, вы можете даже изменить эти переменные, используя fe
__block int anInteger = 123;
перед вызовом блока. Имейте в виду, что вы избегаете сильной ссылки на self
захватывая его внутри блока, чтобы избежать удержания циклов. В этом случае используйте weakSelf
. https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithBlocks/WorkingwithBlocks.html
Функция должна иметь имя, возвращать что-то или быть недействительным.
Метод - это функция класса.
Блоки - это способ обернуть кусок кода и эффективно сохранить его для последующего использования. Вместо функции обратного вызова обычно используется блок. Новые API-интерфейсы в iPhone SDK используют блоки таким образом. API возьмет "блок" кода, который будет запущен по завершении. И блоки представлены быстро, как закрытие.
В быстром это небольшой жесткий синтаксис, чтобы изучить закрытие. но поверьте мне это очень удобно, когда вы начнете его использовать.
Это избавляет вас от необходимости создавать собственные потоки и поддерживать состояние каждого потока, управлять блокировками, настраивать пулы автозапуска и т.д.
Кроме того, при использовании с блоками API Grand Central Dispatch (GCD) API можно запускать в очередях, и все части кода могут выполняться для асинхронного запуска с минимальными усилиями, но при этом сохраняя надежность, требуемую для многопоточного кода.