0

私は自分のプロジェクトで ARC を使用していますが、デバイスでアプリを実行するとクラッシュするので、コマンド + シフト + B をチェックすると、次のリークが表示されます。以下は、私が使用したコードです。

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *CellIdentifier = @"ColourSelectTableCell";

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

            //CGRect frame = CGRectMake(15.0, 5.0, 25.0, cell.frame.size.height-10.0);
            selectedLabel = [[UILabel alloc] initWithFrame:CGRectMake(15.0, 5.0, 25.0, cell.frame.size.height-10.0)];
            selectedLabel.tag = kSelectedLabelTag;
            selectedLabel.font = [UIFont systemFontOfSize:24.0];
            selectedLabel.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.0]; // transparent
            [cell.contentView addSubview:selectedLabel];


            UIImageView *AtoZimage = [[UIImageView alloc] initWithFrame:CGRectMake(70, 10,60, 40)];
            UIImage *atozImage = [UIImage imageNamed:[bgArray objectAtIndex:indexPath.row]];
            AtoZimage.image = atozImage;
            [cell addSubview:AtoZimage];

            UILabel *lblTemp1 = [[UILabel alloc]initWithFrame:CGRectMake(150, 10, 190, 40)];
            lblTemp1.backgroundColor=[UIColor clearColor];
            lblTemp1.tag=kSelectedLabelTag;
            lblTemp1.text = [bgNameArray objectAtIndex:indexPath.row];
            [lblTemp1 setNumberOfLines:10];
            cell.textLabel.lineBreakMode = NSLineBreakByWordWrapping;
            [lblTemp1 setFont:[UIFont boldSystemFontOfSize:16]];
            [cell addSubview:lblTemp1];


        }


        // Configure the cell...
        UIColor *cellColour = [self.bgArray objectAtIndex:indexPath.row];
        CMColourBlockView *colourView = (CMColourBlockView *)[cell viewWithTag:kcolourViewTag];
        colourView.colour = cellColour;

        selectedLabel = (UILabel *)[cell viewWithTag:kSelectedLabelTag];
        if ([self.selectedBg isEqual:cellColour]) {
            selectedLabel.text = @"✔";
        }
        else {
            selectedLabel.text = @"";
        }

        return cell;

    }

示されているようにメモリ リークを表示する ここに画像の説明を入力

4

1 に答える 1

0

CGRectMake はリークとは何の関係もありません。リークは、2 つの UILabels と UIImageView の割り当てから発生します。私が見ているところによると、あなたのプロジェクトでは ARC が有効になっていません。なぜなら、ARC は割り当てられたオブジェクトをここで解放するからです。

ARC が有効になっていることを確認します。

  1. プロジェクト ナビゲータに移動
  2. Project Navigator の最初の行で最上位のプロジェクト項目を選択します。
  3. [ターゲット] でアプリを選択します
  4. エディターの上部にある [ビルド設定] を選択し、「自動」を検索します。
  5. 「Objective-C Automatic Reference Counting」を見つけて設定しますYes
于 2013-09-19T08:09:28.600 に答える