在objective-c中释放数组的内存问题

时间:2011-04-11 06:37:05

标签: iphone objective-c

我遇到问题,任何人都可以帮助我 这是我的代码。此代码首次单击,但单击2次时会出现错误

对象0x4e226a4的

malloc: 错误:释放对象的错误校验和 - 对象可能在被释放后被修改。 * *在malloc_error_break中将断点设置为de ** bug

- (void)updateTextViewContents {
    content = [[NSMutableString alloc] init];   
    for (int i = 0; i <[ _scoresArray count]; i++)
    {
    NSMutableString *data = [_scoresArray objectAtIndex:i];
        [content appendString:data];
        if([content isEqualToString:UserText.text]&&[content isEqualToString:PassText.text])
        {
        UIAlertView *alt = [[UIAlertView alloc] initWithTitle:nil message:@"Valid User" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [alt show];
            [alt release];
            [content release];

        }
        else    
        {
        UIAlertView *alt1 = [[UIAlertView alloc] initWithTitle:nil message:@"NOT A Valid User" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alt1 show];
        [alt1 release];
        }
    }

当我在这里发布它工作但是当我点击第二次时输入正确的用户名和密码都改变视图显示时间。我认为它会发生因为数组得到添加在每个cilck这就是为什么两个改变在时间上看起来如何显示这一点。     // [内容发布];

}

4 个答案:

答案 0 :(得分:0)

你不能替换

NSMutableString *data = [_scoresArray objectAtIndex:i];
        [content appendString:data];

用这个

    [content appendString:[_scoresArray objectAtIndex:i]];

答案 1 :(得分:0)

你的两个警报都显示是因为你的循环放置break后它是有效的用户,因为你是有效的用户后你不能经过循环 希望这会有所帮助 祝你好运

答案 2 :(得分:0)

您在if条件中发布了内容。对于下一次迭代,您再次尝试将数据附加到内容,如果在上一次迭代中条件为真,则已经释放该内容。因此你得到了这个错误 object was probably modified after being freed

答案 3 :(得分:0)

由于产生内存问题,

您在if条件中发布内容 NSMutableString,然后再次附加。

所以,不要释放到for循环中,将它从for循环中释放出来。

- (void)updateTextViewContents {

content = [[NSMutableString alloc] init];

for (int i = 0; i <[ _scoresArray count]; i++) 
{

    NSMutableString *data = [_scoresArray objectAtIndex:i];
    [content appendString:data];
    if([content isEqualToString:UserText.text]&&[content isEqualToString:PassText.text])
    {
        UIAlertView *alt = [[UIAlertView alloc] initWithTitle:nil message:@"Valid User" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alt show];
        [alt release];
        //[content release]; - Not release here.

    }
    else    
    {
        UIAlertView *alt1 = [[UIAlertView alloc] initWithTitle:nil message:@"NOT A Valid User" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alt1 show];
        [alt1 release];
    }
}

[content release];