如何防止NSWindow解除分配?

时间:2014-05-10 11:42:34

标签: objective-c macos cocoa

我尝试分配窗口时使用此代码。然而,它不起作用,窗口将在创建后立即解除分配。有没有办法防止这种情况发生。另请注意,我使用带弧的xcode 5。

    CustomWindow windotest2 = [[CustomWindow alloc] initWithContentRect:frame
                                                                                                                                styleMask:NSBorderlessWindowMask
                                                                                                                                  backing:NSBackingStoreBuffered
                                                                                                                                    defer:NO];

   [windotest2 makeKeyAndOrderFront:NSApp];

    [self.array addObject:windotest2];

1 个答案:

答案 0 :(得分:2)

要使对象保持不变,你需要保留一个有效的指针,但由于windotest2是一个局部变量,当你的方法终止并且没有剩余的实时指针时它会超出范围对象将被解除分配。

通过以下方式,您可以采取的措施是:

@implementation myClass {
    NSMutableArray *_retainedObjects;
}

- (id)init
{
    ...
    _retainedObjects = [[NSMutableArray alloc] init];
    ...
}


- (...)yourMethod
{
    CustomWindow windotest2 = [[CustomWindow alloc]...
    ...
    [_retainedObjects addObject:windotest2];
    ...
}

现在,您的对象在方法返回后有一个有效的指针。