Objective-C:为什么我的对象被实例化为__NSMallocBlock__?

时间:2015-04-25 22:50:17

标签: objective-c cocoa objective-c-runtime

我遇到了一个奇怪的问题,我试图动态创建我之前设置和存储的Class属性(arrayClass)的新实例:

NSObject *instance = [[self.arrayClass alloc] init];
if ( ![instance isKindOfClass:self.arrayClass] )
    NSLog(@"Say what?!");

如果我中断并记录self.arrayClass,它会在控制台上显示正确的类(在本例中为Store),但是当我尝试动态创建它的实例并记录类型时在实例中,它将其类显示为__NSMallocBlock__

到底发生了什么事?

1 个答案:

答案 0 :(得分:2)

事实证明这确实是一个非常愚蠢的错误。我不知何故在我试图实例化的类中创建了一个空init方法,但忘记了实现它(甚至返回任何东西)。奇怪的是,编译器并没有抱怨这一点。

这里是空的init方法:

- (instancetype)init {

}

显然,由于我没有定义或返回self,运行时并没有从预期的init中获取对象。奇怪的是,所做的得到的是__NSMallocBlock__类型,并尝试对该对象做任何事情都会导致崩溃。