目标C没有抛出足够的错误?

时间:2012-03-17 20:19:05

标签: objective-c ios

我是Objective C的新手并且我不是一个优秀的程序员,但有一件事我觉得奇怪的是,当声明未初始化对象时,它不会抛出错误。

我刚刚再遇到这个问题 - 我有一些设置要做,所以我把它放在init函数中 - 但是类是UIViewController,它连接在故事板中。所以init从未被调用过 - 这是我的错误 - (项目中有很多NSObject派生类,我匆匆忙忙地把它扔进去测试一些东西)。

但是我调用应该在int中设置的实例的方法没有抛出错误 - 只是我期望的值是零。

那种东西会无声地失败,这有点奇怪吗?

3 个答案:

答案 0 :(得分:5)

这里有两个不同的问题,对初学者来说都很常见。

  1. 您的init从未被调用,因为它完全是错误的方法。它不是视图控制器的指定初始化程序,并且在任何情况下,来自笔尖或故事板的视图控制器都会获得initWithCoder:。因此,您需要了解将要调用的方法以及何时调用。

  2. 消息为nil返回nil且没有错误。这是Objective-C的一个根深蒂固的特征,并不会改变。关于它的辩论经常是准宗教,并且有一些聪明的方法,但这既不是在这里也不是真的。基本上你可以使用大量的NSLog和大量的nil-checking(NSAssert是一个很好用的东西),特别是在早期阶段。

答案 1 :(得分:1)

一点都不奇怪。 That's how Objective-C has always worked.消息为零无所事事。

答案 2 :(得分:0)

很奇怪,但这就是Obj-C的设计方式。实际上,从Obj-C的角度来看,代码并没有失败(默默地)。一切都是正确的。

在Obj-C中,您可以发送消息(“呼叫方法”)nil

init只是另一条消息(“方法”),而不是构造函数。创建和使用对象不需要它。您只能将Obj-C理解为C语言的薄层。如果你没有在结构上调用函数,C语言也不会报告。