在我的应用程序中,我有两个 View Controller 。第一个Viewcontroller是应用程序窗口的rootViewController。当单击第一个ViewController中的Button时,我将第二个Viewcontroller的 View 作为 subview 添加到第一个ViewController的 View 中,第二个ViewController的 View 中有一个Button,我的问题是,当我点击那个Button时,应用程序崩溃了

-(void)theCheckoutViewisExpandedwitPatient:(id)patient
{
    SecondViewController *sample=[[SecondViewController alloc]init];
    CGRect rect=sample.view.frame;
    rect.origin.y=30;
    rect.origin.x=305;
    [sample.view setFrame:rect];
    [self.view addSubview:[sample view]];
}

最佳答案

问题在于,SecondViewController没有分配给强变量/属性,因此在方法返回时将其释放。

方法返回时,任何指向方法内部对象的变量(如果我没记错的话,都称为自动变量)将从内存中删除。结果,该变量指向的对象将被释放。如果未在其他任何地方保留此对象(例如,通过分配给Strong属性或Strong实例变量),则会将其释放。现在,您正在做的是,获取第二个 View Controller 的 View ,并将其粘贴到定义此方法的 View Controller View 的 View 层次结构中。方法返回,变量从堆栈中弹出,SampleViewController不以任何方式保留,因此将其释放。 "new" View 执行的任何操作(导致对其 View Controller (第二 View Controller )的调用)(例如按钮轻击事件通知)将最终崩溃,因为该 View Controller 不再位于内存中。

顺便提一句。您根本做对了。如果要编写自定义容器,请查看View Controller Containment API。

10-08 11:36