如果我以编程方式创建UILabel,是否有必要在之后发布它?如,
UILabel *label = [[UILabel alloc] initWithFrame:...];
[self.view addSubView:label];
[label release]; // <-- is this needed?
我发现this thread包含了发布行,但据我所知,这在较新的iOS版本中有所不同。
感谢阅读。
答案 0 :(得分:4)
是的,除非您使用ARC,否则需要将其释放
在这种情况下,当您alloc
保留计数为1时
当您执行addSubView
时,视图将retain
您的标签:保留计数为2.
因此,您可以自由地release
平衡alloc
保留计数现在为1.
但是{1} own
为self.view
,当它不再需要它时会调用release。
当发生这种情况时,标签的保留计数将降至0,它将为deallocated
,并且它的内存将是免费的。
答案 1 :(得分:1)
如果您的项目设置为使用ARC(自动引用计数),则尝试将调用添加到release
时会出错。如果您在尝试添加该行时没有收到任何错误,那么您不使用ARC,并且确实需要该行来避免内存泄漏。