2014-05-10 84 views
1

当我尝试分配窗口时,使用此代码。然而,它不起作用,窗口将在创建后立即释放。有什么办法可以防止这种情况发生。另外请注意,我正在使用带有弧线的xcode 5。如何防止NSWindow释放资源?

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

    [windotest2 makeKeyAndOrderFront:NSApp]; 

    [self.array addObject:windotest2]; 

回答

2

要使对象,要坚持,你需要保持一个有效的指针,但因为windotest2是一个局部变量,它超出范围时,你的方法终止,如果没有剩余的活指针对象,对象将被释放。

有些事情,你可以做些什么来缓解这一点,在一个通用的方式是:

@implementation myClass { 
    NSMutableArray *_retainedObjects; 
} 

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


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

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

+0

ohh忘了分配数组。 – Freddy