Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 为什么我的ViewController仅在第二次调用后才释放,iOS ARC?_Iphone_Ios_Uiviewcontroller_Automatic Ref Counting_Release - Fatal编程技术网

Iphone 为什么我的ViewController仅在第二次调用后才释放,iOS ARC?

Iphone 为什么我的ViewController仅在第二次调用后才释放,iOS ARC?,iphone,ios,uiviewcontroller,automatic-ref-counting,release,Iphone,Ios,Uiviewcontroller,Automatic Ref Counting,Release,使用圆弧。 我有两个简单的viewcontroller一个是启动viewcontroller第二个是自定义UIImagepickerViewController(上面有两个自定义视图) 但是当我这样做的时候[自我否定:是的];在camera controller中,它并没有释放内存,只有当我第二次调用它时,它才会调用第一个实例的dealloc并创建第二个实例 别忘了我用圆弧 编辑: 我只是用两个控制器创建一个空白项目,用仪器(分配)运行它,在应用程序完全加载后,我有568Kb,然后我点击显示模态

使用圆弧。 我有两个简单的viewcontroller一个是启动viewcontroller第二个是自定义UIImagepickerViewController(上面有两个自定义视图)

但是当我这样做的时候[自我否定:是的];在camera controller中,它并没有释放内存,只有当我第二次调用它时,它才会调用第一个实例的dealloc并创建第二个实例

别忘了我用圆弧

编辑: 我只是用两个控制器创建一个空白项目,用仪器(分配)运行它,在应用程序完全加载后,我有568Kb,然后我点击显示模态控制器并关闭它,我得到642Kb(在第二个视图控制器中,我从IB放置了10个对象)
问题是为什么?为什么这些数据没有完全销毁,可能是缓存还是一些?

即使您正在调用
dismissModalViewControllerAnimated:
,您仍然保留一个指向它的强指针。您必须设置指针
self.cameraController=nil
告诉ARC您不再需要指向它的指针。

即使您正在调用dismissModalViewControllerAnimated:,您仍然保留指向它的强指针。您必须设置指针
self.cameraController=nil
告诉ARC您不再需要指向它的指针。

谢谢,现在它调用dealloc property,但不释放内存ARC决定这样做时,内存将被释放。这不一定会马上发生。只要你没有保留任何其他指向它的指针,它就会消失。如果您在其他地方有另一个指向它的指针,那么您可能仍然在泄漏内存。我认为ARC会在不再需要这个源代码后立即释放它,我在其他代码中没有指针。@user735924:如果内存没有被释放,那么您必须在某个地方有一个指向它的强指针,或者您有一个保留周期。例如,如果CameraController中的委托属性未声明为弱,则可能发生保留周期。CameraController是UIImagePickerView,我不知道它是否弱。谢谢,现在它调用dealloc,但不释放内存。当ARC决定执行此操作时,内存将被释放。这不一定会马上发生。只要你没有保留任何其他指向它的指针,它就会消失。如果您在其他地方有另一个指向它的指针,那么您可能仍然在泄漏内存。我认为ARC会在不再需要这个源代码后立即释放它,我在其他代码中没有指针。@user735924:如果内存没有被释放,那么您必须在某个地方有一个指向它的强指针,或者您有一个保留周期。例如,如果CameraController中的委托属性未声明为弱,则可能会发生保留周期。CameraController是UIImagePickerView,我不知道它是否弱。
@interface ViewController : UIViewController { 
}
@property (nonatomic, strong) CameraController *cameraController;




@implementation ViewController
@synthesize cameraController;
-(void) showCame {
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{   
    self.cameraController = [[CameraController alloc] init];
    self.cameraController.delegate = self;
    [self presentModalViewController:self.cameraController animated:YES];
}   
}