0

在我的一个视图控制器中,我定义了一个私有变量,如下所示,

@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;
}

CNMaterialsViewController所以问题是,这两个变量的保留计数在每次初始化时都会增加一个。

找不到任何理由。谁能帮我找出问题所在。

作为解决方案,我nil在 initialize 之前分配给这些变量CNMaterialsViewController。但我不认为这是一个好的解决方案。

所以,请帮助我。

4

1 回答 1

0

您必须向编译器提示您希望 ARC 如何处理 ivars。如果您不限定变量,因为__weak编译器会假定您需要一个强引用,并且只要它的父级仍然存在,就会保留它。

添加到@mariusLAN 所说的内容,您不再需要声明 ivars - 您可以简单地声明一个属性并在那里说明您的意图。IE

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