iphone uiButton 释放
Posted
技术标签:
【中文标题】iphone uiButton 释放【英文标题】:iphone uiButton release 【发布时间】:2011-11-16 05:46:17 【问题描述】:先生,
- (void)viewDidLoad
for (int i = 1; i <= 4; i++)
playButton=[[UIButton alloc]initWithFrame:CGRectMake(curLocX,1.0,45,kScrollObjHeight)];
[playButton setBackgroundImage:[UIImage imageNamed:@"Play.png"] forState:UIControlStateNormal];
[playButton addTarget:self action:@selector(playClicked) forControlEvents:UIControlEventTouchUpInside];
curLocX+=100;
我已经在 viewDidUnload 和 dealloc 中释放了 playButton 1.我创建了四个按钮,但我只释放了一次是对还是错 2.我已经发布了viewDidUnload和dealloc它的对错 提前感谢您的宝贵建议 苏雷什.M
【问题讨论】:
【参考方案1】:是的,如果一个对象被分配了 4 次,它应该被释放相同的计数。
顺便说一句,我不确定你想在这里做什么,在循环结束时,playButton 只会引用最后一个对象,你甚至没有将你的 playButton 作为子视图添加到任何视图中。无论如何你可以避免使用 alloc 和 user buttonWithType 方法,这个方法本身处理 UIButton 对象的分配和释放,所以你不必担心释放调用。
- (void)viewDidLoad
for (int i = 1; i <= 4; i++)
UIButton *playButton = [UIButton buttonWithType: UIButtonTypeCustom];
playButton.frame = CGRectMake(curLocX,1.0,45,kScrollObjHeight);
[playButton setBackgroundImage:[UIImage imageNamed:@"Play.png"] forState:UIControlStateNormal];
[playButton addTarget:self action:@selector(playClicked) forControlEvents:UIControlEventTouchUpInside];
curLocX+=100;
[self.view addSubview: playButton]; //you might have missed this statement
【讨论】:
感谢您的宝贵回复。在它自己之前,我添加了子视图。问题只是分配。【参考方案2】:您应该从至少一个位置 (viewDidUnload/dealloc) 中移除按钮释放,以避免为对象调用重复释放。
创建对象(在您的情况下为按钮)并一次释放所有对象是可以的。
【讨论】:
【参考方案3】:您必须在 for 循环本身中释放按钮。
for (int i = 1; i <= 4; i++)
playButton=[[UIButton alloc]initWithFrame:CGRectMake(curLocX,1.0,45,kScrollObjHeight)];
[playButton setBackgroundImage:[UIImage imageNamed:@"Play.png"] forState:UIControlStateNormal];
[playButton addTarget:self action:@selector(playClicked) forControlEvents:UIControlEventTouchUpInside];
curLocX+=100;
[playButton release];
注意: 如果您分配了“n”次对象,则必须释放该对象“n”次。
【讨论】:
以上是关于iphone uiButton 释放的主要内容,如果未能解决你的问题,请参考以下文章
如何使 UIButton 与 UIScrollView 一起移动
UITableViewController 中的 iPhone 奇怪行为