【发布时间】:2015-11-25 01:13:27
【问题描述】:
我有一个父 UIView 和一个 UITextView 作为子视图之一。
我创建了一个按钮来关闭父级UIView,如下所示:
-(void)cancelButtonPressed:(UIButton *)sender
{
[UIView animateWithDuration:0.2 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
self.frame = CGRectZero;
} completion:^(BOOL finished) {
if (finished) {
[self removeFromSuperview];
}
}];
}
我可以看出父 UIView 没有被释放,因为如果我在 UITextView 中输入一些文本并将其关闭,当我再次打开 UIView 而不是空白 UITextView 时, SAME 文本再次出现在其中。
我检查了Leaks 工具,但没有发现任何泄漏。所以我猜我是否有某种保留周期或什么。
更新:我有另一个对象(即AppDelegate)持有UIView 的实例:_myView 作为全局变量,如下所示:
_myView = [[MyView alloc] init];
_myView.nameLabel.text = _user.screen_name;
[_window addSubview:_myView];
[UIView animateWithDuration:0.2 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
_myView.frame = CGRectZero;
} completion:nil];
但是为了避免保留循环,我应该像这样创建一个弱自我:__weak MyView *weakSelf 并在动画块中这样做:[weakSelf removeFromSuperview]?
【问题讨论】:
-
如何创建父视图?可能是您创建它并存储对它的强引用?
-
请显示您添加和处理
UIView的代码。 -
你可能在 self 对象中有一些强指针,它保留了自己。
-
谢谢大家,我刚刚发现有另一个视图有一个强指针,所以它不会在应用程序生命周期中被释放。现在我已经修好了。
标签: ios objective-c uiview retaincount retain-cycle