UILabel/UIbutton等如何从内存中释放它们后仍能工作?
问题描述:
例如:UILabel/UIbutton等如何从内存中释放它们后仍能工作?
UILabel *lblEmail = [[UILabel alloc] initWithFrame:CGRectMake(20, 10, 70, 30)];
[lblEmail setBackgroundColor:[UIColor clearColor]];
[lblEmail setText:@"Email"];
[lblEmail setTag:1];
[contentView addSubview:lblEmail];
[lblEmail release];
在上面的代码中,我们创建一个的UILabel和释放,因此没有内存引用了,但它仍然当我运行的应用程序的作品。我们也可以使用viewWithTag来改变它的值。其他的例子是我创建一个按钮并释放它,但仍然在用户点击它工作的按钮时。
答
内容视图保留了标签/按钮,所以它仍然存在。你创建它的保留计数为1,将它添加到contentView使其保留计数为2,并释放它使其保留计数为1。所以它仍然在。
答
它没有从内存中释放。你只是释放你的它的保留。当你将它作为contentView
的子视图添加时,它将保留在那里。
答
lblEmail只有在引用计数为0时才会被释放。它由contentView保留。
答
阅读Apple的文档addSubview
。
- (void)addSubview:(UIView *)view
要添加的视图。这一观点是由接收
是的,我知道这一点保留......但让我们在我的内容观点有10个标签和文本框10登记表的情况下......然后我的内容查看保留计数是21 ...我如何管理这种情况? – Prabh 2011-04-19 15:36:58
你可以通过遵循一个简单的规则来管理它......如果你负责创建(alloc/init,copy等)或保留一个对象,你有责任释放。 – MarkPowell 2011-04-19 15:40:13
您的contentView保留计数不是21.如果您添加10个标签和10个textField,则每个标签和文本字段的保留计数为1,并且contentView本身的保留计数为1(假定应用程序中没有任何其他保留这些对象)。 – Christian 2011-04-19 16:36:36