Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone内存泄漏问题_Iphone_Objective C_Memory Leaks - Fatal编程技术网

iPhone内存泄漏问题

iPhone内存泄漏问题,iphone,objective-c,memory-leaks,Iphone,Objective C,Memory Leaks,当我“构建和分析”时,我没有任何警告。没有任何警告。但当我运行“性能工具”时,我会遇到一些红色障碍:( 我有一个表格,每个单元格都有星号(收藏夹按钮),当我点击星号性能工具时,会在那里显示红色方框。这是我的方法。 我曾尝试“释放”indexPath和channel,但随后我的应用程序崩溃:(我仍在学习内存管理,所以请帮助 - (void) didTapStar: (UIButton *) button withEvent: (UIEvent *) event { NSIndexPa

当我“构建和分析”时,我没有任何警告。没有任何警告。但当我运行“性能工具”时,我会遇到一些红色障碍:( 我有一个表格,每个单元格都有星号(收藏夹按钮),当我点击星号性能工具时,会在那里显示红色方框。这是我的方法。 我曾尝试“释放”indexPath和channel,但随后我的应用程序崩溃:(我仍在学习内存管理,所以请帮助

- (void) didTapStar: (UIButton *) button withEvent: (UIEvent *) event
{   
    NSIndexPath * indexPath = [self.tableView indexPathForRowAtPoint: [[[event touchesForView: button] anyObject] locationInView: self.tableView]];
    int selectedItemRowIndex = indexPath.row;

    Channel *channel = [tableData objectAtIndex:selectedItemRowIndex];  
    channel.IsFavorite = !channel.IsFavorite;

    if(channel.IsFavorite == YES)
    {       
        [button setImage:[UIImage imageNamed:IMG_FAVORITE_STARRED] forState:UIControlStateNormal];      
    }
    else 
    {
        [button setImage:[UIImage imageNamed:IMG_FAVORITE_STAR] forState:UIControlStateNormal];
    }

    [self setSelectedChannelFavoriteStatus:channel];        

    // Reloading data

    [itemsData removeAllObjects];
    [searchedData removeAllObjects];
    [tableData removeAllObjects];

    [self initializeDatabaseStructure];     
    [self getChannelsForSelectedItem];

    Channel *co;    
    for(co in itemsData)
    {
        img1 = [UIImage imageNamed:co.IconPath];
        if(img1 == nil)
        {           
            continue;
        }
        else
        {
            co.IconImage = img1;                                        
        }
    }

    [tableData addObjectsFromArray:itemsData];

    [self.tableView reloadData];        
}

- (void) initializeDatabaseStructure
{
    if(sqlite3_open([[self filePath] UTF8String], &db_beta) != SQLITE_OK)
    {           
        sqlite3_close(db_beta);
        NSAssert(0, MSG_DATABASE_FAILED_TO_OPEN);
    }   
}


- (void) setSelectedChannelFavoriteStatus:(Channel *)channel
{
    NSString *tempIsFavorite;

    if(channel.IsFavorite == YES)
    {
        tempIsFavorite = [[NSString alloc]initWithString:@"1"];
    }
    else 
    {
        tempIsFavorite = [[NSString alloc]initWithString:@"0"];
    }

    NSMutableString *sql = [NSMutableString stringWithFormat:@"UPDATE tblChannels SET IsFavorite = '%@' WHERE ChannelId = %i", tempIsFavorite, channel.ChannelId];

    char *err;
    if(sqlite3_exec(db_beta, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK)
    {
        sqlite3_close(db_beta);
        NSAssert(0, MSG_ERROR_UPDATING_TABLE);
    }
    else 
    {
        NSLog(@"Updating favorite field.");
    }   

    [tempIsFavorite release];
}


- (void) getAllChannels
{
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];  
    NSString *myString = [prefs stringForKey:PREF_PROVIDER];

    NSString *sql = [NSString stringWithFormat:@"SELECT * FROM tblChannels WHERE ChannelProvider = '%@' ORDER BY ChannelName", myString];

    sqlite3_stmt *cmd;  

    if(sqlite3_prepare_v2(db_beta, [sql UTF8String], -1, &cmd, nil) == SQLITE_OK)
    {
        while(sqlite3_step(cmd) == SQLITE_ROW)
        {               
            char *clnChannelId = (char *) sqlite3_column_text(cmd, 0);
            NSString *m_ChannelId = [[NSString alloc] initWithUTF8String:clnChannelId];

            char *clnChannelName = (char *) sqlite3_column_text(cmd, 1);
            NSString *m_ChannelName = [[NSString alloc] initWithUTF8String:clnChannelName];

            char *clnChannelLogo = (char *) sqlite3_column_text(cmd, 2);
            NSString *m_ChannelLogo = [[NSString alloc] initWithUTF8String:clnChannelLogo];

            char *clnChannelUrl = (char *) sqlite3_column_text(cmd, 3);
            NSString *m_ChannelUrl = [[NSString alloc] initWithUTF8String:clnChannelUrl];   

            char *clnChannelIsFavorite = (char *) sqlite3_column_text(cmd, 5);
            NSString *m_ChannelIsFavorite = [[NSString alloc] initWithUTF8String:clnChannelIsFavorite]; 

            Channel *c = [[Channel alloc]init];
            c.ChannelId = [m_ChannelId integerValue];
            c.Name = m_ChannelName;
            c.IconPath = m_ChannelLogo;
            c.StreamUrl = m_ChannelUrl; 

            if ([m_ChannelIsFavorite isEqualToString:@"0"]) 
            {
                c.IsFavorite = NO;
            }
            else 
            {
                c.IsFavorite = YES;
            }

            [itemsData addObject:c];

            [m_ChannelId release];
            [m_ChannelName release];
            [m_ChannelLogo release];
            [m_ChannelUrl release];
            [m_ChannelIsFavorite release];
            [c release];
        }           
        sqlite3_finalize(cmd);                      
    }
}

你调用了很多类方法,它们可能有漏洞

[self setSelectedChannelFavoriteStatus:channel];        
[self initializeDatabaseStructure];     
[self getChannelsForSelectedItem];

[self-InitializedTabaseStructure];[self-getChannelsForSelectedItem];我用InitializedTabaseStructure和setSelectedChannelFavoriteStatus代码更新了问题。getChannelsForSelectedItem呢?我现在把它添加到问题中了。我认为所有的字符*cln变量都泄漏到-(void)GetAllChannels但是怎么做?如何释放字符?