0

我有这个名为 mySegmented 的属性,声明如下

.h
@property (retain)  UISegmentedControl *mySegmented;


.m
@synthesize mySegmented = _mySegmented;

然后,它是这样创建的:

self.mySegmented = [self createSegmented];
// createSegmented creates an autoreleased segmented control

我的应用程序有 3 个不同的分段控件。在给定的时间只出现一个。在我的应用程序的某个时刻,我必须隐藏一个特定的分段控件,所以,我要做的是构建所有分段控件的数组并迭代......这是在一个块内。

[UIView animateWithDuration:0.8

             animations:^{

                 NSArray *list = [NSArray arrayWithObjects:
                                  self.mySegmented1,
                                  self.mySegmented2,
                                  self.mySegmented3,
                                  nil];

                 for (UISegmentedControl *oneSeg in list) {
                     [oneSeg setAlpha:0.0f];
                 }

             }];

发生的情况是:一段时间后,应用程序在尝试构建此数组时崩溃。我想其中一个分段控件以某种方式被解除分配。我可以在代码中看到没有释放。

我的问题是:这个正在创建的数组是自动释放的。当块完成动画时会发生什么?是否向阵列的每个成员发送了一个版本?

如果我在创建后保留分段控件,Xcode 会抱怨它会泄漏。

任何线索?

谢谢。

4

1 回答 1

2

请像您尝试过的那样保留,但请确保在dealloc方法中释放它们,Xcode 不应该那样抱怨。

您的数组也在块内自动释放,但这很好,数组不拥有其中的引用,真正的问题是视图控制器没有保留分段控件。

让我知道事情的后续。

于 2012-05-13T01:26:31.597 回答