"описание" не удается для NSURLConnection - PullRequest
5 голосов
/ 24 августа 2011

У меня есть класс, производный от NSURLConnection.Любопытно, что description и dealloc терпят неудачу при обращении к NSURLConnection (даже если фактическая операция передачи данных завершается успешно).

Вот метод init моего класса:

-(id) init {
    self = [super init];
    NSLog(@"%s -- self description is %@", __PRETTY_FUNCTION__, [self description]);
    NSLog(@"%s -- super description is %@", __PRETTY_FUNCTION__, [super description]);
    return self;
}

Вот вывод журнала выполнения этого кода (я реализовал description для моего класса):

2011-08-24 10:41:40.493 SleepyHead[77578:207] -[BinaryExchange init] -- self description is <BinaryExchange>
(gdb) continue
Program received signal:  “EXC_BAD_ACCESS”.

Когда это происходит, отладчик останавливается в строке [super description] и при вызовеNSURLConnection description.

Что, черт возьми, происходит?

(Я пытался выделить и не инициировал еще одну копию класса до этого, на случайный случайчто был кусок фиктивной кучи, привыкшей, но я все еще получаю ту же ошибку.)

Добавлено:

Даже эта последовательность не срабатывает:

NSURLConnection* dummy = [[NSURLConnection alloc] init];
NSLog(@"%s -- dummy NSURLConnection description is %@", __PRETTY_FUNCTION__, [dummy description]);

1 Ответ

5 голосов
/ 24 августа 2011

Если происходит сбой, есть обратный след.Опубликовать это.

Странный сбой, хотя.

[super description] довольно близко к чепухе.Метод description не предназначен для использования в производственной среде;это метод только для разработки.

Вы переопределили description в своем подклассе, случайно?

Также выделение и не инициализация другого на самом деле ничего не делает.Это может даже не выделить ничего.Большинство кластеров классов и многие другие классы (как подробности реализации) будут возвращать синглтон в alloc, и только при инициализации будет создан конкретный подкласс.

О - NSURLConnection не использует init в качестве назначенного инициализатора.Требуется запрос.Скорее всего, вызывая init, вы фактически не инициализируете класс, и он довольно эффектно падает в результате неопределенного внутреннего состояния.

Использование initWithRequest:....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...