试图弄清楚这是否是内存泄漏:Xcode

时间:2011-10-05 14:35:22

标签: iphone objective-c ios xcode

我有以下方法,并且想知道我是否要运行这一百次这会是内存泄漏。

-(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)。我想知道这是否会导致问题。任何帮助都是极好的!谢谢!

4 个答案:

答案 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)

如果你复制,分配或新的一次,那么你只发布一次。

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html