2011-09-07 26 views
0

我写了一个相当简单的应用程序,它产生了一个线程,最终调用以下方法将UILabel放置在某个位置。随着方法关闭,我预计ARC会清理标签。我错了。 :)如何在iOS5中强制发布?或者有没有更好的方式来与UILabel做到这一点?

有没有办法强制这些被清理或有什么明显的我失踪?谢谢!

-(void) drawNumberLabel:(NSString *)labelText xloc:(float)xLocation yLoc:(float)yLocation { 

    UILabel *tempLabel; 
    tempLabel = [[UILabel alloc] initWithFrame:CGRectMake(xLocation, yLocation, 27.0, 59.0)]; 
    tempLabel.font = [UIFont fontWithName:@"Helvetica" size:fontSize]; 
    tempLabel.text = labelText; 
    tempLabel.backgroundColor = backgroundColor; 
    tempLabel.textColor = textColor; 
    [self addSubview:tempLabel]; 

} 

回答

0

当您使用ARC(自动引用计数)时,不应该进行任何内存管理调用,因为编译器会在编译时为您插入这些语句。

编译器应该注入[tempLabel release];到编译时的方法结束。

但是,因为您已将标签作为子视图添加到视图,所以包含的视图将保留该标签,并且只有从该视图中移除标签后,标签才会被释放。

+0

感谢您的回应,我同意应该是行为。我将在代码中查看其他地方,看看是否有某种方式持有这些东西。谢谢你确认我在做什么! – cltfalc

+0

谢谢!我很乐意帮助你解决这个问题。 – BigSauce

+0

如果你觉得我帮你解决了这个问题,你可以投我的答案吗?谢谢,祝你好运! – BigSauce

1

“清理标签”是什么意思?你是否期待tempLabel在这个方法结束时被释放?它不会,因为当您拨打[self addSubview:tempLabel]时,您的视图会保留标签。当超级视图解除分配时,您添加的标签也将被解除分配。

相关问题