ошибки памяти при смене базового класса objective-c

решил получше разобраться в работе классов в objective-c и написать простой базовый класс, столкнулся со следующей проблемой: попытка вызвать метод у объекта наследующегося от Написанного класса приводит в segfault, при этом если наследоваться от NSObject проблем не возникает. Не совсем понятно, как базовый класс влияет на вызов методов и обращение к полям у наследников.

#include <objc/runtime.h>
#import <Foundation/Foundation.h>


__attribute__((objc_root_class))
@interface TestRoot
+alloc;
-(instancetype)init;
@end
@implementation TestRoot
+alloc {
    return class_createInstance(self, 0);
}
-(instancetype)init {
    return self;
}
@end



@interface FromNSObject : NSObject
@property(readwrite) int num;
@end
@implementation FromNSObject
-(instancetype)init {
    self = [super init];
    _num = 5;
    return self;
}
-(void)print {
    printf("%d\n", _num);
}
@end

@interface FromTestRoot : TestRoot
@property(readwrite) int num;
@end
@implementation FromTestRoot
-(instancetype)init {
    self = [super init];
    _num = 5;
    return self;
}
-(void)print {
    printf("%d\n", _num);
}
@end



int main(int argc, char const **argv) {
    FromNSObject *ns = [[FromNSObject alloc] init];
    [ns print]; // 5
    FromTestRoot *ts = [[FromTestRoot alloc] init];
    [ts print]; // segmentation fault
    return 0;
}

Ответы (2 шт):

Автор решения: Dmitry Serov

Одного createInstance мало, нужен ещё constructInstance в инициализаторе, чтобы выделить память под сам объект и его ivarы

→ Ссылка
Автор решения: user23797921

Разобрался, если кому-то понадобится - всё что требовалось, добавить в TestRoot поле isa. После чего ошибки пропали и методы начали корректно отрабатывать:

__attribute__((objc_root_class))
@interface TestRoot
@property Class isa; //именно отсутствие этой штуки приводило к ошибкам.
+alloc;
-(instancetype)init;
@end
→ Ссылка