回收标签以进行循环并释放它们

时间:2012-03-24 23:49:15

标签: iphone memory-management loops for-loop uilabel

当我想重新使用它时,创建UILabel并再次发布它的正确方法是什么,直到我的数组中没有记录?

我想这样做:

// create label
UILabel *labelIWishToRecycle;

for (int i = 0; i < [myArrayFullOfItems count]; i++) {
    // Edit the label
    labelIWishToRecycle = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 640)];
}

// Release label
[labelIWishToRecycle release];

当我以这种方式这样做时,我会因为释放而崩溃。所以我就是不释放它。现在就像一个魅力。当然,这不是方法,所以我想知道是什么。

我应该为数组中的每个项目创建和发布标签吗?或者我应该在for循环之外创建它但是在其中释放它?或者......?

提前致谢。

1 个答案:

答案 0 :(得分:0)

你在用什么标签!?如果要将它添加到视图中,那么每次都必须使用新实例..如果您只进行大小计算或类似的事情,那么您可以一遍又一遍地使用相同的标签。

但诀窍是初始化你的局部变量: UILabel *labelIWishToRecycle = nil;

如果您已完成此操作,则保存为发送版本(如果尚未分配实际标签)。之前,您的指针指向一个随机地址,并且您正试图在该地址释放该对象。在大多数情况下,这将是一次崩溃。

(当你的数组计数为零时,猜测问题是一个。)