NSMutableArray可见性/保留问题

时间:2011-08-18 17:45:35

标签: objective-c cocoa nsmutablearray retaincount

好吧所以我对NSMutableArray类有点新意,我觉得我错过了一些明显的东西。我有一个对象将一个NSMutable数组传递给我的窗口控制器,如my.m:

summaryWindow   = [[SummaryWindowController alloc] init];
[summaryWindow setGlobalStatusArray:globalStatusArray];

我在summaryWindow对象中有接收器方法,如下所示:

-(void)setGlobalStatusArray:(NSMutableArray *)myArray
{

    if ([myArray count] >0) {
        if (globalStatusArray) {
            [globalStatusArray release];
        }
        globalStatusArray = [[NSMutableArray alloc] initWithArray:myArray];

        NSLog(@"Summary Window Init with new array: %@",globalStatusArray);

我看到NSLog没问题,在同一个对象(summaryWindow)中我有以下方法:

- (NSMutableArray *)getGlobalStatusArray
{

    return globalStatusArray;
}

现在我将.St文件中的globalStatusArray声明为

NSMutableArray   *globalStatusArray;

所以不应该保留,因为我正在使用:initWithArray?

当我尝试在另一个IBAction方法中访问此值时:

- (IBAction)refreshButtonClicked:(id)sender
{
    NSLog(@"The user has clicked the update button");
    [ aBuffer addObjectsFromArray: globalStatusArray];
    NSLog(@"Buffer is currently:%@",aBuffer);
    [tableView reloadData];
}

NSMutable数组为空

2011-08-18 10:40:35.599 App Name[65677:1307] The user has clicked the update button
2011-08-18 10:40:35.600 App Name[65677:1307] Buffer is currently:(
)

我已经尝试使用我自己的方法获取值,即[self getGlobalStatusArray],但我遗漏了一些巨大的东西。 FYI aBuffer也在我的.h中声明,

2 个答案:

答案 0 :(得分:0)

此代码没有做任何有用的事情:

if ([myArray count] >0) {
    if (globalStatusArray) {
        [globalStatusArray release];
    }
    globalStatusArray = [[NSMutableArray alloc] initWithArray:myArray];

如果旧数组的计数为零,则它会泄漏实际的数组对象。如果计数不为零,那么它正在正确释放它。只是做释放,不要打扰计数。

你确定myArray中确实存在某些东西吗?

答案 1 :(得分:0)

正如albertamg所指出的那样,它看起来像一个空数组而不是nil,并且在正常情况下释放的物体在神奇的情况下并不神奇地变为零。

这有两种不同的物体。尝试在方法中记录self,看看是否有一个实例正在获取数组而另一个实例正在与UI进行交互。