2

私は正常に動作しているアプリケーションを持っています.しかし、私はメモリリークがないようにする必要があります.だから私はアナライザーでビルドすることに決めました,そして、私は非常に多くの小さな小さなメモリ管理の問題を見ました.私はこれを除いてほとんどすべてを整理しました.ここに私のセルオブジェクトがありますリークされたオブジェクトとして表示されますが、実際にはどこで足を踏み入れたのかわかりません。これが私のcellforRowatIndexpath方法です。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:EventCellIdentifier];


    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:EventCellIdentifier];

        UIImageView* img = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"cell_with_arrow.png"]];
        [cell setBackgroundView:img];
        [img release];    

        cell.textLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:13.0];
        cell.textLabel.lineBreakMode = UILineBreakModeWordWrap; // Pre-iOS6 use UILineBreakModeWordWrap
        cell.textLabel.numberOfLines =0; 
        [cell.textLabel sizeToFit];


    }


     [[cell viewWithTag:12] removeFromSuperview];
    [[cell viewWithTag:13] removeFromSuperview];

    PTPusherEvent *event = [eventsReceived objectAtIndex:indexPath.row];







    //cell.textLabel.text = event.name;
    // cell.detailTextLabel.text = [event.data description];

    NSDictionary *payload =event.data;
    NSLog(@"%@",payload);
    NSString *tes=[payload objectForKey:@"from"];
    NSString *subtitle = [NSString stringWithString: @"From "];
    subtitle = [subtitle stringByAppendingFormat:@"%@",tes];










    cell.detailTextLabel.text = subtitle;
    cell.textLabel.text = [payload objectForKey:@"message"];

    cell.textLabel.backgroundColor = [UIColor clearColor];
    cell.detailTextLabel.backgroundColor = [UIColor clearColor]; 



    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    // [dateFormat setDateFormat:@"dd-MMM-YYYY HH:mm:ss"];
    [dateFormat setDateFormat:@"dd-MMM-YYYY hh:mm a"];
    [dateFormat setTimeZone:[NSTimeZone defaultTimeZone]]; 
    NSDate *todaysdate=[NSDate date];
    NSString *todaysdateString = [dateFormat stringFromDate:todaysdate];
    [dateFormat release];

    CGSize boundingSize = CGSizeMake(320, CGFLOAT_MAX);
    CGSize requiredSize = [cell.textLabel.text sizeWithFont:cell.textLabel.font
                                          constrainedToSize:boundingSize
                                              lineBreakMode:UILineBreakModeWordWrap];
    CGFloat requiredHeight = requiredSize.height;  


    MarqueeLabel *rateLabelOne =  [[MarqueeLabel alloc] initWithFrame:CGRectMake(115, requiredHeight+15,155, 20) rate:50.0f andFadeLength:10.0f];    
    rateLabelOne.numberOfLines = 1;
    rateLabelOne.marqueeType = MLContinuous;
    rateLabelOne.opaque = NO;
    rateLabelOne.enabled = YES;
    rateLabelOne.shadowOffset = CGSizeMake(0.0, -1.0);
    rateLabelOne.textAlignment = UITextAlignmentRight;
    rateLabelOne.textColor = [UIColor redColor];
    rateLabelOne.backgroundColor = [UIColor clearColor];
    rateLabelOne.font = [UIFont fontWithName:@"Helvetica-Bold" size:12.000];
    rateLabelOne.text = @"OFFline!cannot communicate now.....";

    MarqueeLabel *rateLabelTwo = [[MarqueeLabel alloc] initWithFrame:CGRectMake(215, requiredHeight+15,100, 20) rate:50.0f andFadeLength:10.0f];
    rateLabelTwo.marqueeType = MLContinuous;
    rateLabelTwo.numberOfLines = 1;
    rateLabelTwo.opaque = NO;
    rateLabelTwo.enabled = YES;
    rateLabelTwo.shadowOffset = CGSizeMake(0.0, -1.0);
    rateLabelTwo.textAlignment = UITextAlignmentRight;
    rateLabelTwo.textColor = [UIColor blueColor];
    rateLabelTwo.backgroundColor = [UIColor clearColor];
    rateLabelTwo.font = [UIFont fontWithName:@"Helvetica" size:12.000];
    rateLabelTwo.text = todaysdateString;

    if([chatstatus isEqualToString:@"online"])
    {

        rateLabelTwo.tag=12;

        [cell addSubview:rateLabelTwo];
        [rateLabelTwo release];



    }
    else
    {
        rateLabelOne.tag=13;

        [cell addSubview:rateLabelOne];
        [rateLabelOne release];



    }


return cell;
}

あのモンスターの居場所を見つけるのを手伝ってくれる人はいますか?

4

4 に答える 4

3

autoreleaseasを付ける必要があります。

cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:EventCellIdentifier] autorelease];

そうしないと漏れます。

アップデート:

AppleDelegate が述べたように、

[rateLabelTwo release];また、 if 条件の外に移動して、 and の両方のケース[rateLabelOne release];で解放されるようにする必要もあります。アナライザーは、これもリークとして検出します。ifelse

于 2012-10-23T06:37:39.973 に答える
0

次の行を使用します。

cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:EventCellIdentifier]autorelease];

これにより、メモリリークが解消されます。

于 2012-10-23T06:38:00.500 に答える