0

I need some help with releasing a controller in xcode ..im not using ARC ..take a look at this simple code from my main delegate controller:

LoginViewController *login = [[LoginViewController alloc] init];
[window addSubview:login.view];
[window makeKeyAndVisible];
[login release];  // code runs if i comment out this line

If i comment out the last line the program runs. The program crashes on the last line ...i put in a zombie and here is the result: 2012-08-17 09:43:02.193 dialer[238:707] * -[LoginViewController performSelector:withObject:withObject:]: message sent to deallocated instance 0x186360

how can i trace this and why is this even happing since im allocating and releasing right away. Does it have something to do with retain , etc

4

1 回答 1

1

登录控制器作为子视图添加后释放,但是addSubview方法并没有保留控制器(只有controller.view),所以不能再继续使用。

你必须释放它,否则你会有泄漏,解决方案是在你的类中创建一个属性/ivar并将视图控制器分配给它(而不是局部变量),然后在dealloc中释放它。

我认为您缺少的一点是 [login release] 语句有效地将您的 loginViewController 的保留计数减少到零,并且该对象丢失/清理,这不是您想要的,因为只要您仍然需要它显示子视图。

因此,您的父对象(主控制器,如果我正确理解您的示例)创建 loginController,将 loginView 添加为子视图(通过执行 addSubview 调用保留),然后释放控制器,但您仍然需要它来处理登录查看!所以解决方案是在主控制器中保留一个引用,以便在需要时保留它(直到您删除 loginView,或者主控制器被释放)

于 2012-08-17T13:57:49.280 回答