我尝试分配窗口时使用此代码。然而,它不起作用,窗口将在创建后立即解除分配。有没有办法防止这种情况发生。另请注意,我使用带弧的xcode 5。
CustomWindow windotest2 = [[CustomWindow alloc] initWithContentRect:frame
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered
defer:NO];
[windotest2 makeKeyAndOrderFront:NSApp];
[self.array addObject:windotest2];
答案 0 :(得分:2)
要使对象保持不变,你需要保留一个有效的指针,但由于windotest2
是一个局部变量,当你的方法终止并且没有剩余的实时指针时它会超出范围对象将被解除分配。
通过以下方式,您可以采取的措施是:
@implementation myClass {
NSMutableArray *_retainedObjects;
}
- (id)init
{
...
_retainedObjects = [[NSMutableArray alloc] init];
...
}
- (...)yourMethod
{
CustomWindow windotest2 = [[CustomWindow alloc]...
...
[_retainedObjects addObject:windotest2];
...
}
现在,您的对象在方法返回后有一个有效的指针。