IOS-手动释放内存问题

来源:互联网 发布:web数据挖掘毕设课题 编辑:程序博客网 时间:2024/06/11 04:04

刚开始学的时候是从IOS5开始的,从IOS4升级后的IOS5,最大的亮点就是ARC,自动释放内存,所以做项目的时候就会打开ARC,(ios5在建立的时候就会提醒你要不要打开ARC,我看了一下IOS7时却没有了这个功能,打开和关闭,见http://blog.csdn.net/q199109106q/article/details/8565403)

用ARC的时候觉得很舒服,很爽啊,但师父说,有的时候ARC并不能完全管理你的内存,想要内存控制的更好,手动管理是一个不错了选择

于是,我开始了手动管理

刚开始啊,经常发现有的东西都是空的,找了之后才发现还没赋值就已经被我释放掉了

 UILabel * endLabel = [[UILabel alloc]initWithFrame:CGRectMake(5, 10, 40, 25)];

    endLabel.text = @"到";

  [endLabel release];

    [whiteView2 addSubview:endLabel];

像这样,endLabel是不会出现到你的UI上的,那是因为过早释放

应该这样

 UILabel * endLabel = [[UILabel alloc]initWithFrame:CGRectMake(5, 10, 40, 25)];

    endLabel.text = @"到";

    [whiteView2 addSubview:endLabel];

  [endLabel release];OK,大功告成

局部变量的释放就在后面直接释放,而定义的全局变量就应该在这里

- (void)dealloc

{

[super dealloc];

[endLabel release];

}

比如说tableView里面的Cell

 cell = [[[ActivityCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]autorelease];

使用autorelease释放

最后,还有一个

比如说UIbutton

释放的时候要考虑这样问题

不是所有的Button都是需要释放的

像这样,就是不用释放的,不管他是局部变量还是全局变量

 //保存按钮

    UIButton * saveBtn =[UIButton buttonWithType:UIButtonTypeCustom];

    saveBtn.frame = CGRectMake(10, self.view.frame.size.height-180, 300, 45);

    [saveBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];

    [saveBtn setTitle:@"保存" forState:UIControlStateNormal];

    [saveBtn addTarget:self action:@selector(tapSaveBtn) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:saveBtn];

只要记住,有alloc的地方就一定要有release



0 0
原创粉丝点击