Я бегу в странные проблемы, где я пытаюсь динамически создать новый экземпляр свойства Class
(arrayClass
), который я задал и хранящегося ранее:Objective-C: Почему мой объект создается как __NSMallocBlock__?
NSObject *instance = [[self.arrayClass alloc] init];
if (![instance isKindOfClass:self.arrayClass])
NSLog(@"Say what?!");
Если я нарушу и войти self.arrayClass
, он показывает правильный класс на консоли (в данном случае - Store
), но когда я пытаюсь создать его экземпляр динамически и регистрирую тип экземпляра, он показывает свой класс как __NSMallocBlock__
.
Что происходит?
Как представлено - [init] явно не возвращает значение, оно возвращает мусор, который случайно появился в регистре eax или в другом месте, которое используется платформой ABI для возврата значения. Здесь он, кажется, является указателем на некоторый объект блока (возможно, уже выпущенный), просто кладя на кучу. Если бы вам повезло больше, это указывало бы на то, что вы не получите segfault. Кстати, как вы пропустили предупреждение? – user3125367
@ user3125367: возможно, у него были все предупреждения выключены :) – Cristik
Честно говоря, в Obj-C честно так много предупреждений, что я этого не заметил. Кроме того, это дало предупреждение «контроль до конца не-пустоты». Имо это действительно должно быть ошибкой компиляции. – devios1