Xcode中可能的编译器错误?

时间:2012-05-20 00:16:16

标签: objective-c ios xcode xcode4.2

情况如下: 我创建了一个自定义视图类,其中包含UITextView作为其成员。在发生某些事件后,我将textView作为第一响应者。

@inteface MyCustomView : UIView{
   UITextView* textView;
}

- (void) doSomething;

@end

在程序执行期间,我将[doSomething]消息发送到MyCustomView的实例。

[myCustomViewInstance doSomething];

发生的事情非常有趣,程序因抱怨UITextView:doSomething是无法识别的选择器而崩溃。

为什么程序在UITextView(其成员变量)上调用doSomething而不是MyCustomView的实例。

这里可能出现什么问题? (当然这是我正在做的事情的规范版本,但我不理解在任何逻辑错误情况下这可能是真的,除非在编译器级别搞砸一些事情)

您认为我应该进一步调查什么?

1 个答案:

答案 0 :(得分:3)

首先,Objective-C没有“成员”变量,它有实例变量。小事;但术语确实很重要。

其次,崩溃正在发生,因为myCustomViewInstance指向UITextView的实例,而不是您的子类。这可能是因为您无意中进行了这样的分配,或者可能是因为您有一个过度释放的问题,而且恰好是所述变量最终指向错误的对象。

最后,虽然肯定存在编译器错误,但极不可能这种直截了当的代码会揭示一个迄今未知的编译器错误。您正在使用的编译器与用于编译OS的数百万行代码的编译器完全相同;这样一个简单的错误很可能意味着没有应用程序可以工作,或者很可能,设备甚至无法启动。

假设所说的代码行实际上是崩溃的东西。