0

カスタム ビュー (Horizo​​ntalMenuView) を使用するビュー コントローラー (EmbeddedMenuView) があります。埋め込みメニュー ビューは、複数の Horizo​​ntalMenuViews を使用します。Horizo​​ntalMenuView には UITableView が含まれています。テーブル ビューの各セルはかなりの量のメモリを使用します (高品質の画像)。

今度は、Horizo​​ntalMenuView のテーブル ビュー セルのセクションがタッチされるたびに、タスクを実行する必要があります。これを行うには、テーブル ビュー セルにプロトコルを作成し、Horizo​​ntalMenuView にそのデリゲートを割り当てます。次に、Horizo​​ntalMenuView でプロトコルを作成し、EmbeddedMenuView にデリゲートを割り当てました。そこで、タッチ イベントを EmbeddedMenuView に渡します。

問題は、セルのデリゲートを割り当てると、Horizo​​ntalMenuView の割り当てが解除されないことです。このビューはビューが表示されるたびに更新されるため、メモリ使用量はすぐに制御不能になります。

セルにデリゲートが割り当てられている部分をコメントアウトすると、すべて正常に機能します。

私の質問は: UITableViewCell のデリゲートを適切に解放するにはどうすればよいですか?

これは、Horizo​​ntalMenuView のコード スニペットです。

-(UITableViewCell*) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

//Custom Logic

    HorizontalMenuItemTableViewCell *cell = (HorizontalMenuItemTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (cell == nil) {

        cell = [[[NSClassFromString([[AMPUIManager sharedManager] classNameForName:cellIdentifier]) alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease];

        cell.shouldAlwaysTransform = shouldAlwaysTransform;
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        cell.colorsDict = colorsDict;

        if ([cell isKindOfClass:[ATCustomTableViewCell class]]) {
            ((ATCustomTableViewCell *)cell).delegate = self; //Commenting this out solves my problem.
        }

    }

//More Custom Logic 



    return cell;

}

PS私は手動参照カウントを使用しています。ARC は、このプロジェクトのオプションではありません。

4

1 に答える 1

1

循環参照があるようです。ほとんどの場合、デリゲートで「割り当て」規則を使用する必要があります。

参照:なぜ Objective-C デリゲートには通常、retain ではなく assign プロパティが与えられるのですか?

于 2012-08-27T00:15:18.367 に答える