首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内存管理示例

内存管理示例
EN

Stack Overflow用户
提问于 2010-09-15 04:12:54
回答 4查看 154关注 0票数 0

这是我的一个类中的一些代码,我想知道我是否正确地处理了内存,或者我是否在哪里泄漏了内存?

代码语言:javascript
复制
@implementation CardViewController
@synthesize playerImage;
@synthesize cardLabel;
@synthesize card;
@synthesize frontView;
@synthesize backView;
@synthesize nameLabel;
@synthesize infoLabel;
@synthesize delegate;

-(void) initialiseButtons 
{
NSLog(@"initialiseButtons  %d",totalButtons);
int ypos = playerImage.frame.origin.y + playerImage.frame.size.height + 42;
for(int i=0; i<totalButtons; i++) 
{       
    StatView *sv = [[StatView alloc] initWithYPos:ypos];
    sv.tag = 100 + i;
    [sv.overlayButton addTarget:self action:@selector(statTapped:)    
                 forControlEvents:UIControlEventTouchUpInside];
    sv.overlayButton.tag = 10 + i;
    [self.frontView addSubview:sv];
    ypos += 26;
}
}

-(IBAction) statTapped:(id) sender 
{

UIButton *tappedButton = (UIButton *)sender;
int tag = tappedButton.tag;
if(delegate && [delegate respondsToSelector:@selector(cardTapped:)]) {
    [delegate cardTapped:tag-10];
}
 }

-(void) viewDidLoad 
{
NSLog(@" viewDidLoad CVC");
[self initialiseButtons];

metaData = [[NSArray alloc]     
      initWithObjects:@"Height",@"Weight",@"Games",@"Attack",@"Defense", nil];
 }

-(void) setCard:(Card *)newCard 
{
NSLog(@"setCard");
[card release];
card = [newCard retain];
[self updateUI];
}

- (void)dealloc 
{
[card autorelease];
[metaData autorelease];
 [super dealloc];
}

@end

我应该在哪里释放StatView *sv = [StatView alloc :ypos];如果我释放它,每一次循环都会产生问题吗?除此之外,我还能处理剩下的内存吗?

谢谢-Code

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-09-15 04:33:43

  1. 在此行之后发布新的StatView

[self.frontView addSubview:sv];

[sv release]; // frontView retains sv

  • Release在dealloc中声明为retaincopy的所有属性。候选属性: playerImage、cardLabel等。发送release消息,而不是autorelease

\\[card autorelease];

[card release];

  • In viewDidUnload释放所有声明为IBOutlet的属性,并将变量设置为nil

[frontView release], frontView = nil;

票数 0
EN

Stack Overflow用户

发布于 2010-09-15 04:25:00

是的,当您将该StatView插入到视图层次结构中时,您应该在每次循环迭代结束时释放它。

票数 1
EN

Stack Overflow用户

发布于 2010-09-15 04:27:49

您应该尝试一下内置到XCode中的分析器,因为它非常擅长发现这些类型的内存泄漏。来个look吧。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3712522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档