1

(^.^)“再次抱歉,我的英语不好,如果有人喜欢纠正我的编辑,我将不胜感激”

你是对的。但是:首先,当我单击创建按钮时,它会使用 alloc 创建新的视图控制器,并自动保留计数 +1,当我按下终止按钮时,保留计数 -1 和等于 0 这意味着理论上创建的视图控制器已从内存我更正了代码:

- (IBAction)create:(id)sender{
    if(vc == nil){ //if is not nil this mean vc have some space of memory reference and vc is not created
    //if == nil this mean vc does not have space of memory reference so create.
    vc = [[VC alloc] initWithNibName:@"VC" bundle:[NSBundle mainBundle]];// retain count + 1
    [_VW addSubview:vc.view];
}

  - (IBAction)kill:(id)sender{
    [vc.view removeFromSuperview]; //When view removeFromSuperview is called also dealloc is called of the vc view
    [vc release];// retain count - 1  the curren count is equal 0 this mean vc does not have space of memory
     vc = nil; // remove the reference of memory.
  }

*但是当我制作项目的配置文件并单击按钮创建和终止时,内存不会减少只会增长*

抱歉,但我无法粘贴图像,因为我是新手发布,但是当我在 Allocations init 中使用 Live Bytes 584,19kb 初始化配置文件并且在 1 分钟内 Live Bytes 为 1,08 mb 时,不会释放任何内容,只会增长。

我现在不知道为什么如果我正确地创建和释放请帮助。

4

1 回答 1

1

您可以使用以下两种方式 - 1. 分配一次并在 dealloc 中释放 -

- (IBAction)create:(id)sender{
    if(vc == nil){ 
        vc = [[VC alloc] initWithNibName:@"VC" bundle:[NSBundle mainBundle]];
        [_VW addSubview:vc.view];
    }
}

- (IBAction)kill:(id)sender{
    [vc.view removeFromSuperview]; 
}

- (void)dealloc {
    [vc release];

    [super dealloc];
}

2. 每次分配,同时释放——

- (IBAction)create:(id)sender{
    if(vc == nil){ 
        vc = [[[VC alloc] initWithNibName:@"VC" bundle:[NSBundle mainBundle]] autorealease];
        [_VW addSubview:vc.view];
    }
}

- (IBAction)kill:(id)sender{
    [vc.view removeFromSuperview]; 
}

现在您可以尝试其中任何一个,然后检查内存占用。

于 2012-04-14T05:34:02.200 回答