У меня есть приложение iOS, которое разбивается на вызовы типа __destroy_helper_block_253
и __destroy_helper_block_278
, и я не совсем уверен, что ссылается либо на "destroy_helper_block", либо на номер после того, как он должен указывать на.
Есть ли у кого-нибудь указатели на то, как отслеживать, где именно могут произойти эти сбои?
Вот пример трассировки (обратите внимание, что строки с __destroy_helper_block
ссылаются только на файл, в котором он содержится, и ничего больше, когда обычно включается номер строки).
Thread : Crashed: com.apple.root.default-priority
0 libdispatch.dylib 0x000000018fe0eb2c _dispatch_semaphore_dispose + 60
1 libdispatch.dylib 0x000000018fe0e928 _dispatch_dispose + 56
2 libdispatch.dylib 0x000000018fe0e928 _dispatch_dispose + 56
3 libdispatch.dylib 0x000000018fe0c10c -[OS_dispatch_object _xref_dispose] + 60
4 Example App 0x00000001000fe5a4 __destroy_helper_block_278 (TSExampleApp.m)
5 libsystem_blocks.dylib 0x000000018fe53908 _Block_release + 256
6 Example App 0x00000001000fda18 __destroy_helper_block_253 (TSExampleApp.m)
7 libsystem_blocks.dylib 0x000000018fe53908 _Block_release + 256
8 libdispatch.dylib 0x000000018fe0bfd4 _dispatch_client_callout + 16
9 libdispatch.dylib 0x000000018fe132b8 _dispatch_root_queue_drain + 556
10 libdispatch.dylib 0x000000018fe134fc _dispatch_worker_thread2 + 76
11 libsystem_pthread.dylib 0x000000018ffa16bc _pthread_wqthread + 356
Изменить 1: Здесь приведен пример одного из блоков, определенных в файле, где произошел сбой (с измененным кодом приложения).
- (void)doSomethingWithCompletion:(void (^)())completion {
void (^ExampleBlock)(NSString *) = ^{
NSNotification *notification = [NSNotification notificationWithName:kExampleNotificationName object:nil userInfo:nil];
[[NSNotificationCenter defaultCenter] postNotification:notification];
if (completion) {
completion();
}
};
// Async network call that calls ExampleBlock on either success or failure below...
}
В файле есть много других блоков, но большинство из них предоставляются в качестве аргументов методов вместо того, чтобы сначала определять их, а затем ссылаться позже.
Изменить 2: добавлено больше контекста для вышеописанной функции.