在 NSMutableArray 中管理 UIControls

Posted

技术标签:

【中文标题】在 NSMutableArray 中管理 UIControls【英文标题】:Managing UIControls in NSMutableArray 【发布时间】:2013-03-30 10:07:18 【问题描述】:

我有一个 NSMutableArray。

我创建了一个 UIControl(比如 UISlider)并在 for 循环中将它添加到这个数组中。

for (int i=0; i<totalSlider; i++) 

UISlider *tmpSlider = [[UISlider alloc] initWithRect:CGRect(0,0,200,40)];

[myArray addObject: tmpSlider];


这工作正常。 我可以参考它

UISlider *tmpSlider = [myArray objectAtIndex:j];

但是如何在维护的同时单独移除和释放这些对象 该数组中剩余的滑块?

例如,这个数组中有 10 个滑块。 所以我想删除索引 5 处的滑块。如何去做呢? 谢谢。

【问题讨论】:

【参考方案1】:

首先,您已经在堆栈中创建了所有 UISlider,位于每个 UISlider 之上。

因为你的坐标是相同的CGRect(0,0,200,40)];

所以你只会看到其中一个。

现在,如果您想删除其中任何一个,只需使用

[myArray removeObjectAtIndex:5];

编辑:

Jed's answer 的摘录。

与 NSArray 一样,NSMutableArray 的实例保持强引用 到他们的内容。如果不使用垃圾回收,当将对象添加到数组时,对象 收到保留消息。当一个对象从一个可变对象中移除时 数组,它接收一个释放消息。如果没有进一步 对象的引用,这意味着对象被释放。 如果您的程序保留对此类对象的引用,则该引用 除非您之前向对象发送保留消息,否则将变为无效 它已从数组中删除。

【讨论】:

首先不,我的滑块没有堆叠,因为我有代码可以适当地设置它们的中心点。无论如何,所以我不需要 [[myArray objectAtIndex:j] release]; ? 发布?你在使用 MRC 吗? 好的。所以我不需要手动释放。很高兴知道谢谢。

以上是关于在 NSMutableArray 中管理 UIControls的主要内容,如果未能解决你的问题,请参考以下文章

NSMutableArray 上的内存管理

iOS内存管理--NSArray与NSMutableArray用copy修饰还是strong

iOS内存管理--NSArray与NSMutableArray用copy修饰还是strong

将自动释放的对象添加到 NSMutableArray

无法将 NSMutableArray 写入 NSFileManager iOS Sdk

Objective - C NSArray不可变数组和NSMutableArray可变数组