我有以下方法,并且想知道我是否要运行这一百次这会是内存泄漏。
-(void)displayPointsOnBoard:(int)wordPoints atCoor:(NSNumber*)coor{
NSLog(@"%i", wordPoints);
CGPoint p = [[points objectForKey:[coor stringValue]] CGPointValue];
UIImageView* pointDisplay = [[UIImageView alloc] initWithFrame:CGRectMake((p.x - 15), (p.y - 35), 76.f, 40.f)];
pointDisplay.backgroundColor = [UIColor clearColor];
pointDisplay.image = [UIImage imageNamed:@"point_display_box.png"];
[self addSubview:pointDisplay];
[UIView beginAnimations:@"" context:NULL]; // Begin animation
[UIView setAnimationDuration:.4];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
pointDisplay.frame = CGRectOffset(pointDisplay.frame, 0.f, -35.f);
[UIView commitAnimations]; // End animations
[UIView beginAnimations:@"" context:NULL]; // Begin animation
[UIView setAnimationDuration:.3];
[UIView setAnimationDelay:.3];
pointDisplay.alpha = 0;
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDidStopSelector:@selector(removeDisplay:)];
[UIView commitAnimations]; // End animations
[pointDisplay release];
}
我发布了pointDisplay,但我仍然在我的视图中使用它(即使它的alpha为0.0)。我想知道这是否会导致问题。任何帮助都是极好的!谢谢!
答案 0 :(得分:2)
这不会导致内存泄漏,内存管理看起来还不错......如果你这样调用100次,你的内存会不断增加,但这不会被认为是泄漏,因为如果你发布视图就是除此之外,UIImageViews也将被释放......当您分配一些对象或数据然后无法释放时发生内存泄漏...例如
-(void)blah
{
NSString *s=[[NSString alloc] init];
}
上面会导致内存泄漏,因为该方法会创建一个带有+1引用计数的字符串,当该方法退出时,您不再具有对该字符串的引用,因此您将无法释放它并且系统不会回收为字符串分配的内存..在你的例子中,你添加的UIView保留了UIImageView,但是当你释放UIView时,它上面的所有UIImageViews也将被释放。
希望这有帮助
答案 1 :(得分:1)
如果你想从你的视图中删除pointdisplay,请参阅下面的代码
[pointDisplay removeFromSuperView];
答案 2 :(得分:1)
[pointDisplay release];
抵制
UIImageView* pointDisplay = [[UIImageView alloc] initWithFrame:CGRectMake((p.x - 15), (p.y - 35), 76.f, 40.f)];
然后添加子视图
[self addSubview:pointDisplay];
增加了pointDisplay的保留次数;当相应版本从超级视图中删除或者取消分配self时,相应的版本将自动发送到pointDisplay(UIView会在其dealloc中自动释放它的子视图)。它具有0.0 alpha或隐藏的事实没有任何区别。
答案 3 :(得分:0)