Запитання з тегом «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
Список синтаксису оголошень блоку
Синтаксис блоку в об'єктиві C (і справді C, я припускаю), як відомо, не є несумісним. Передача блоків як аргументів виглядає інакше, ніж оголошення блоків як ivars, що виглядає інакше, ніж typedefing блоків. Чи є вичерпний список синтаксису блок-декларацій, який я міг би тримати під рукою для швидкого довідки?

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 until …

9
Збережіть цикл на "self" за допомогою блоків
Я боюся, що це питання є досить базовим, але я думаю, що це стосується багатьох програмістів Objective-C, які потрапляють у блоки. Я чув, що оскільки блоки захоплюють локальні змінні, на які посилаються в якості constкопій, використання selfблоку може призвести до збереження циклу, якщо цей блок буде скопійований. Отже, ми повинні …

6
Коли використовувати enumerateObjectsUsingBlock vs. for
Крім очевидних відмінностей: Використовуйте, enumerateObjectsUsingBlockколи вам потрібен і індекс, і об'єкт Не використовуйте, enumerateObjectsUsingBlockколи вам потрібно змінювати локальні змінні (я помилявся з цього приводу, див. Відповідь bbum) Є чи в enumerateObjectsUsingBlockцілому вважається краще або гірше , якщо for (id obj in myArray)б також працювати? Які переваги / недоліки (наприклад, це …

5
Оголосити параметр методу блоку без використання typedef
Чи можна вказати параметр блоку методу в Objective-C без використання typedef? Це повинно бути, як функціональні вказівники, але я не можу потрапити на виграшний синтаксис без використання проміжного типуdef: typedef BOOL (^PredicateBlock_t)(int); - (void) myMethodTakingPredicate:(PredicateBlock_t)predicate лише вищезгадані компіляції, всі ці помилки: - (void) myMethodTakingPredicate:( BOOL(^block)(int) ) predicate - (void) myMethodTakingPredicate:BOOL …


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 *)region …

7
Альтернативи dispatch_get_current_queue () для блоків завершення в iOS 6?
У мене є метод, який приймає блок і блок завершення. Перший блок повинен працювати у фоновому режимі, тоді як блок завершення повинен працювати в будь-якій черзі, до якої називався метод. Для останнього я завжди користувався dispatch_get_current_queue(), але здається, що це застаріло в iOS 6 або вище. Що я повинен використовувати …

4
У чому різниця між __слабким та __блоковим посиланням?
Я читаю документацію Xcode, і ось щось мене бентежить: __block typeof(self) tmpSelf = self; [self methodThatTakesABlock:^ { [tmpSelf doSomething]; }]; З документації копіюється: Блок формує сильне посилання на змінні, які він фіксує. Якщо ви використовуєте selfвсередині блоку, блок формує сильне посилання на self, тому, якщо воно selfтакож має сильне посилання …

3
Як зберігати блоки у властивостях у Objective-C?
Я хотів би зберегти блок object-c у властивості для подальшого використання. Я не був впевнений, як це зробити, тому я трохи погуглив, і там дуже мало інформації про тему. Але врешті-решт мені вдалося знайти рішення, і я подумав, що, можливо, варто поділитися з іншими новачками, як я. Спочатку я думав, …
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.