作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我对从方法返回的对象的内存警告感到困惑。这是我的代码。
-(void)returnHeaderView
{
self.headerView=[[UIView alloc]init];
headerView.frame=CGRectMake(0, 0, 955, 45);
UILabel *fromLabel=[self returnLabel];
fromLabel.frame=CGRectMake(400, 5, 200, 44);
fromLabel.text=@"Open Time";
[headerView addSubview:fromLabel];
[fromLabel release];(in correct decrement of the reference count of an object that is not owned at this point by the caller)
[self.headerView addSubview:fromLabel];
[self.view addSubview:self.headerView];
[self.headerView release];
-(UILabel *)returnLabel
{
UILabel *label= [[UILabel alloc] init] ;
label.textColor = [UIColor blackColor];
label.font = FONT_TITLE;
label.numberOfLines=1;
label.textAlignment=UITextAlignmentLeft;
label.lineBreakMode=UILineBreakModeWordWrap;
label.backgroundColor=[UIColor clearColor];
return label;
}
这是我的两种方法。1.-(void)returnHeaderView。2.-(UILabel *)returnLabel.
-returnLabel 正在返回标签,方法返回的 UILabel 对象的引用传递给 returnHeaderView 方法的 fromLabel UILabel 对象。然后我释放 fromLabel 对象。
但是它给出了内存警告(正确减少调用者此时不拥有的对象的引用计数)。
所以有人建议我这段代码有什么问题。以及如何释放方法返回的对象。
谢谢。
最佳答案
在您的 returnHeaderView
中,您实际上并没有保留 fromLabel
,因此您不拥有它,也不应该在那里发布它(警告“incorrect decrement of the此时调用者不拥有的对象的引用计数”)。
最好的选择是自动释放返回的标签:return [label autorelease];
并让它存活直到周围的自动释放池被耗尽。请注意,这也意味着从 returnHeaderView
方法中删除 [fromLabel release];
调用。
如果这听起来很复杂,请按照实际建议使用 ARC。
关于ios - OBJ-C : How to release object which is return from method?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15803487/
我是一名优秀的程序员,十分优秀!