0

私のView Controllerの1つで、次のようにプライベート変数を定義しました。

@implementation CNLibraryViewController {
 CNMaterialsViewController *_materials;
}

ビューをリロードするたびに、新しくメモリを割り当て、この変数を次のように初期化します。

_materials = [[CNMaterialsViewController alloc] init];
_materials.gridViewActionDelegate = self;
_materials.itemRetrieving = self.dataModel.itemRetrieval;
[_materials setSortDescriptors:_sortDescriptors];
[_materials loadItems:[results allObjects]];

では、CNMaterialsViewController.m次のようにいくつかのプライベート変数を定義しました。

@implementation CNMaterialsViewController {
    CNItemViewController *_itemViewController;
    id<CNItemViewControllerViewSetupDelegate> _itemDescriptionTileSetup;
}

問題は、これら 2 つの変数の保持カウントが、CNMaterialsViewController初期化のたびに 1 つずつ増加することです。

その理由は見つかりませんでした。誰でも問題を見つけるのを手伝ってくれますか。

解決策として、nilinitialize の前にこれらの変数に代入しますCNMaterialsViewController。しかし、私はそれが良い解決策だとは感じていません。

だから、私を助けてください。

4

1 に答える 1

0

ARC で ivar をどのように処理するかについて、コンパイラーに指示を与える必要があります。変数を修飾しないと__weak、コンパイラは強い参照が必要であると想定し、その親がまだ存在している限りそれを保持します。

@mariusLAN の発言に加えて、もう ivar を宣言する必要はありません。単純にプロパティを宣言して、そこで意図を述べることができます。すなわち

@interface CNLibraryViewController
@property (weak, nonatomic) CNMaterialsViewController *_materials;
@end
于 2012-09-30T14:58:57.950 に答える