Вопросы с тегом «objective-c-blocks»

Блоки - это реализация Apple закрытий для C, которые также доступны для Objective-C и C ++.


8
Что означает ключевое слово «__block»?
Что именно означает __blockключевое слово в Objective-C? Я знаю, что это позволяет вам изменять переменные внутри блоков, но я хотел бы знать ... Что именно он говорит компилятору? Это делает что-нибудь еще? Если это все, что нужно, то зачем это нужно? Это где-нибудь в документах? (Я не могу найти это).

8
Присвойте переменную внутри блока переменной за пределами блока
Я получаю ошибку Переменная не присваивается (отсутствует спецификатор типа __block) на линии aPerson = participant;. Как я могу убедиться, что блок может получить доступ к aPersonпеременной и aPersonпеременная может быть возвращена? Person *aPerson = nil; [participants enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { Person *participant = (Person*)obj; if ([participant.gender isEqualToString:@"M"]) …


7
Список синтаксиса декларации блока
Блочный синтаксис в Objective C (и, как я полагаю, C), как известно, неуместен. Передача блоков в качестве аргументов выглядит иначе, чем объявление блоков как ivars, что выглядит иначе, чем в typedefблоках. Есть ли полный список синтаксиса объявления блока, который я мог бы держать под рукой для быстрого ознакомления?

8
Как избежать захвата себя в блоках при реализации API?
У меня есть работающее приложение, и я работаю над его преобразованием в ARC в Xcode 4.2. Одно из предупреждений перед проверкой включает в себя selfсильный захват в блоке, приводящем к циклу сохранения. Я сделал простой пример кода, чтобы проиллюстрировать проблему. Мне кажется, я понимаю, что это значит, но я не …

10
Ожидание выполнения двух асинхронных блоков перед запуском другого блока.
При использовании GCD мы хотим подождать, пока два асинхронных блока не будут выполнены и выполнены, прежде чем перейти к следующим шагам выполнения. Каков наилучший способ сделать это? Мы попробовали следующее, но это не сработало: dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ { // block1 }); dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ { // block2 }); // wait …

9
Сохранить цикл на «себя» с блоками
Боюсь, этот вопрос довольно простой, но я думаю, что он актуален для многих программистов Objective-C, которые разбираются в блоках. Я слышал, что поскольку блоки захватывают локальные переменные, на которые они ссылаются как constкопии, использование selfвнутри блока может привести к циклу сохранения, если этот блок будет скопирован. Таким образом, мы должны …

6
Когда использовать enumerateObjectsUsingBlock или для
Помимо очевидных отличий: Используйте, enumerateObjectsUsingBlockкогда вам нужен и индекс, и объект Не используйте, enumerateObjectsUsingBlockкогда вам нужно изменить локальные переменные (я ошибся, см. Ответ bbum) Является ли в enumerateObjectsUsingBlockцелом считается лучше или хуже , если for (id obj in myArray)бы также работать? Каковы преимущества / недостатки (например, более или менее эффективны)?


5
Объявите параметр метода блока без использования typedef
Можно ли указать параметр блока метода в Objective-C без использования typedef? Должно быть, как указатели на функции, но я не могу использовать синтаксис победы без использования промежуточного определения типа: typedef BOOL (^PredicateBlock_t)(int); - (void) myMethodTakingPredicate:(PredicateBlock_t)predicate только вышеупомянутые компиляции, все они терпят неудачу: - (void) myMethodTakingPredicate:( BOOL(^block)(int) ) predicate - (void) …

7
Сохраните закрытие как переменную в Swift
В Objective-C вы можете определить вход и выход блока, сохранить один из тех блоков, которые передаются в метод, а затем использовать этот блок позже: // in .h typedef void (^APLCalibrationProgressHandler)(float percentComplete); typedef void (^APLCalibrationCompletionHandler)(NSInteger measuredPower, NSError *error); // in .m @property (strong) APLCalibrationProgressHandler progressHandler; @property (strong) APLCalibrationCompletionHandler completionHandler; - (id)initWithRegion:(CLBeaconRegion …

7
Альтернативы dispatch_get_current_queue () для блоков завершения в iOS 6?
У меня есть метод, который принимает блок и блок завершения. Первый блок должен работать в фоновом режиме, а блок завершения должен выполняться в той очереди, в которой был вызван метод. Последнее я всегда использовал dispatch_get_current_queue(), но похоже, что он устарел в iOS 6 или выше. Что мне использовать вместо этого?
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.