Я прочитал вопрос ниже, и история SEEMS просто:
Что именно супер в Objective-C?
Все же ...
- (id) init
{
NSLog(@"self=%p, super=%p", self, super);
}
Это выводит "self = 0xa83dc50, super = 0xbfffe8d0".Адреса НЕ ОДНОВРЕМЕННЫЕ ???!?!?
Этот второй адрес выглядит как «особое значение» или что-то в этом роде.Что это значит?
Спасибо bbum за то, что он указал, что это значение является адресом стека специальной структуры, используемой компилятором для реализации "супер" поведения.
Я могу позвонить [super init], и вызов, кажется, работает, или, по крайней мере, ничего не взрывается ... не сразу.Вызов [((id) 0xbfffe8d0) init] завершается неудачно с EXC_BAD_ACCESS.
Затем есть часть REALLY WEIRD ..... У меня есть фрагмент кода, который без объяснимой причины выдает "NSGenericException: коллекция была видоизменена при перечислении "исключение.Внутри РАЗЛИЧНОГО объекта (в основном это оболочка, которая имеет указатель на NSEnumerator), комментирование вызова «[super init]» приводит к тому, что исключение не происходит.Если бы я мог, я бы выложил награду в размере $$$ за ответ на этот тупой ум."... WTF?Итак, я выкладываю второй вопрос для этой странности ...
Первоначально я пришел сюда с одной из тех ошибок "странных симптомов", которые оказались совершенно не связаны (типично для таких вещей): Есть ли у приведения адреса (id) побочные эффекты ???Адрес 0xbfffe8d0 особенный?(исправлено: проблема была с _NSCallStackArray)
Тем не менее, содержимое над строкой остается в силе, и ответ по-прежнему отлично.Прочтите его, если хотите немного глубже понять ObjC.