TableView HeaderSection内存分配

时间:2011-02-10 13:19:45

标签: iphone objective-c memory-management tableview

我正在使用

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
{    
    customView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 24.0)];//custom view    
    // create the button object
    headerLabel = [[UILabel alloc]initWithFrame:CGRectMake(10, 3, tableView.bounds.size.width, 18)];//header label    
    headerLabel.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource: @"section" ofType: @"png"]]];       
    customView.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource: @"section" ofType: @"png"]]];    
    headerLabel.textColor = [UIColor whiteColor];//text color of header label           
    headerLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:15];//font of header label        
    headerLabel.font = [UIFont boldSystemFontOfSize:15];    
    headerLabel.frame = CGRectMake(0.0, 0.0, 320.0, 24.0);//frame of header label

    if(searching)//checking searching {    
        headerLabel.text = @"  Search Results";//searching results as a text of header label    
    }       
    else {    
        if(section == 0)//checking which section is chosen   {    
            headerLabel.text = @"  Sponsored";//sponsored as header label
        }
        else {      
            headerLabel.text = @"  Unsponsored";//un sponsored as header label          
        }
    }

    if(searching)//checking searching {                  
        headerLabel.text = @"  Sök resultat";//sok resultant text as a header label                  
    }
    else {    
        if(section == 0)//checking which section is chosen {     
            headerLabel.text = @"  Sponsrade";//sponsorade as text of header label
        }                    
        else   {
            headerLabel.text = @"  Un Sponsrade";//usponsrade as text of header label
        }   
    }                

    [customView addSubview:headerLabel];//header label as a subview     
    //NSLog(@"endOfviewForHeaderInSection");        
    //[headerLabel release];                
    return customView;//returning custom view

    [customView release];       
    //NSLog(@"endOfviewForHeaderInSection");
}

在表视图中的header部分将表分成两部分,当我在滚动表视图时上下内存分配增加得非常快,但是在header部分上没有使用上面提到的代码,没有内存分配和app工作罚款。但是需要在标题部分使用上面的代码,我不能从标题中删除代码,我也想减少内存分配。还有其他方法来解决问题。

先谢谢。

2 个答案:

答案 0 :(得分:4)

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
{       
    //NSLog(@"startOfviewForHeaderInSection");
    // create the parent view that will hold header Label

    customView = nil;

    [customView release];

    headerLabel =nil;

    [headerLabel release];

    customView = [[UIView alloc]init];

    headerLabel = [[UILabel alloc]init];

   // customView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 24.0)];//custom view

    // create the button object
 //   headerLabel = [[UILabel alloc]initWithFrame:CGRectMake(10, 3, tableView.bounds.size.width, 18)];//header label



    //customView.frame = CGRectMake(0.0, 0.0, 320.0, 24.0);

    //headerLabel.frame = CGRectMake(0.0, 0.0, 320.0, 24.0);//frame of header label
    //DetailedCoupon *detailedcouponObj = [[DetailedCoupon alloc]init];//object of detailed 

    headerLabel.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource: @"section" ofType: @"png"]]];

    //customView.backgroundColor = [detailedcouponObj getColor:@"D7D8D1"];//background color

    customView.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource: @"section" ofType: @"png"]]];

    //headerLabel.backgroundColor = [UIColor blackColor];
   // headerLabel.opaque = NO;//opaque header label

    headerLabel.textColor = [UIColor whiteColor];//text color of header label

   // headerLabel.highlightedTextColor = [UIColor whiteColor];//highlighted text color of header label

   // headerLabel.font = [UIFont boldSystemFontOfSize:20];//font of header label

    headerLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:15];//font of header label

    headerLabel.font = [UIFont boldSystemFontOfSize:15];

    headerLabel.frame = CGRectMake(0.0, 0.0, 320.0, 24.0);//frame of header label

    NSUserDefaults *pref = [NSUserDefaults standardUserDefaults];//object of NSUserDefault

    NSString *storeLanguage = [pref objectForKey:@"language"];//store language of string type

    if ([storeLanguage isEqualToString:@"English"])//comparison of language choosed
    {

        if(searching)//checking searching

        {

            headerLabel.text = @"  Search Results";//searching results as a text of header label

        }

        else {

            if(section == 0)//checking which section is choosed

            {

                headerLabel.text = @"  Sponsored";//sponsored as header label

            }

            else  

            {

                headerLabel.text = @"  Unsponsored";//un sponsored as header label

            }   

        }
    }

    else
         {

             if(searching)//checking searching

             {


                 headerLabel.text = @"  Sök resultat";//sok resultant text as a header label

             }

             else {

                 if(section == 0)//checking which section is choosed

                 {

                     headerLabel.text = @"  Sponsrade";//sponsorade as text of header label

                 }

                 else  

                 {

                     headerLabel.text = @"  Un Sponsrade";//usponsrade as text of header label

                 }  

             }

         }

    [customView addSubview:headerLabel];//header label as a subview

    //NSLog(@"endOfviewForHeaderInSection");

    //[headerLabel release];

    storeLanguage = nil;

    [storeLanguage release];

    return customView;//returning custom view

    [pref release];

    [customView release];

    //NSLog(@"endOfviewForHeaderInSection");

}

答案 1 :(得分:0)

您的代码在帖子中的格式很差,难以理解。

但我看到的是:您可能会在释放之前退回自定义视图。你可以在返回之前自动发布它。

如果这是表的顶部部分的一种可能性是使用表的headerView,我相信你不需要像viewForHeaderInSection那样重复分配。您也可以尝试创建和缓存新内容,而不是一遍又一遍地创建它。