NSMutableArray作为实例变量

时间:2011-08-18 23:15:26

标签: objective-c cocoa nsmutablearray instance-variables nswindowcontroller

我有一个实例变量,它是一个NSMutableArray

@interface SummaryWindowController : NSWindowController {

    NSMutableArray *aBuffer;

使用此方法设置NSMutableArray(从初始化此对象的对象调用):

- (void)setGlobalStatusArray:(NSMutableArray *)myArray
{
    if (!aBuffer) {
        [myArray retain];
        NSLog(@"aBuffer not init , alloc init now");
        aBuffer = [[NSMutableArray alloc] initWithArray:myArray];
    }
    NSLog(@"--> Received buffer: %@",aBuffer);

}

当该方法运行时,NSLog显示数组的内容:

2011-08-18 16:00:26.052 AppName[74751:1307] --> Recievied buffer: (
        {
        discription = DiskUsage;
        menu = "<NSMenuItem: 0x1005116e0 Hardware Status>";
        status = Warning;
    },

但在我使用此实例变量的方法中,它似乎不再是init'ed

- (IBAction)refreshButtonClicked:(id)sender
{
    NSLog(@"The user has clicked the update button");
    if (!aBuffer) {
        NSLog(@"refresh button not init");
    }
    NSLog(@"Buffer is currently:%@",aBuffer);
}

当它到达这一点时,我看到以下NSLog:

2011-08-18 16:04:25.301 AppName[74829:1307] The user has clicked the update button
2011-08-18 16:04:25.303 AppName[74829:1307] refresh button not init
2011-08-18 16:04:25.304 AppName[74829:1307] Buffer is currently:(null)

哪会告诉我aBuffer已经(自动?)发布了?

为什么会这样做的任何想法?我一开始以为我有两个不同的对象,一个是我通过从原始控制器启动NSWindowController而创建的:

   @interface AppName_AppDelegate : NSObject 
    NSMutableArray *globalStatusArray;

    @implementation AppName_AppDelegate

    if ( summaryWindow ) {
            [summaryWindow release];
        } // end if
        summaryWindow   = [[SummaryWindowController alloc] initWithWindowNibName:@"SummaryWindow" owner:globalStatusController];
    [summaryWindow showWindow:self];
    [summaryWindow setGlobalStatusArray:globalStatusArray];

还有一个是在nib加载,相同但不同的对象时创建的,但我现在认为不是这样的情况,因为我再也看不到重复的NSLog了,所以我假设它只是NSMutableArray的一些基本内存问题( S)?

2 个答案:

答案 0 :(得分:1)

当您保留myArray时,您将保留aBuffer

答案 1 :(得分:0)

尝试使用

@property (nonatomic, retain) NSMutableArray *aBuffer

在您的界面中。

接下来,

 @synthesize aBuffer

在.m文件中。在那之后,

设置数组时,请执行以下操作:

    self.aBuffer = [[NSMutableArray alloc] initWithArray:myArray];

请注意“自我”,以便您指定属性。