奇怪的Objective-C问题

时间:2010-07-15 13:42:43

标签: iphone objective-c memory-management

我的应用程序有一个导航控制器和两个视图,firstController和secondController。 firstController有一个webView,它显示一个带链接的html页面,点击任何链接都会将用户带到secondController。这是程序停止通过调试器停止的地方。

见下面的代码。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {

    if (navigationType == UIWebViewNavigationTypeLinkClicked) {
        secondController *nextController = [[secondController alloc] init];

        [self.navigationController pushViewController:nextController animated:YES];
        [nextController release];

        return NO;
    }
    return YES;
}

这个工作正常,除了我第一次通过第一次单击firstController上的任何链接从firstController导航到secondController时,应用程序刚刚退出。(firstController链接点击,secondController后退按钮,firstController链接点击,secondController后退按钮,firstController链接点击并且应用程序崩溃了)

  

因未捕获而终止应用   例外   'NSInvalidArgumentException',原因:   '*** - [NSCFSet长度]:无法识别   选择器发送到实例0x251f100'

这太奇怪了。我已经尝试了一切,但仍然无法弄清楚出了什么问题。

2 个答案:

答案 0 :(得分:2)

你有一个内存问题,其中一些对象被发送长度消息,但该对象早已消失并且它的内存被NSCFSet对象占用。有错误的解释。现在是bug。

您可能希望尽快释放nextController,但等待一会儿;使用autorelease使nextController至少保持活着,直到你的应用程序返回某个空闲模式。所以:

secondController *nextController = [[[secondController alloc] init] autorelease];

否则,深入研究secondController的内部工作原理。

答案 1 :(得分:0)

如果您想知道您的套件有多少元素

,请使用NSSet count