Iphone IOS内存管理问题(收到内存警告。)
我有一个空白屏幕,我点击相机按钮并拍照,然后照片以UIVIew的形式出现在我的空白屏幕上,我正在将多个图像从相机添加到空白屏幕。问题是,有时我可以在空白屏幕上添加多个图像,但有时当我捕获图像时,空白屏幕上的所有图像都会消失,只显示当前图像。 在日志中。它显示我收到了内存警告。 这是我的密码。我想我现在正在正确地释放我的对象。但当我最终添加[object release]时,我的应用程序崩溃了Iphone IOS内存管理问题(收到内存警告。),iphone,objective-c,ios,xcode,Iphone,Objective C,Ios,Xcode,我有一个空白屏幕,我点击相机按钮并拍照,然后照片以UIVIew的形式出现在我的空白屏幕上,我正在将多个图像从相机添加到空白屏幕。问题是,有时我可以在空白屏幕上添加多个图像,但有时当我捕获图像时,空白屏幕上的所有图像都会消失,只显示当前图像。 在日志中。它显示我收到了内存警告。 这是我的密码。我想我现在正在正确地释放我的对象。但当我最终添加[object release]时,我的应用程序崩溃了 -(void)AddImagesToCanvasWithGesture{ if(imag
-(void)AddImagesToCanvasWithGesture{
if(imageFromPicker.size.width > imageFromPicker.size.height || imageFromPicker.size.width == imageFromPicker.size.height)
{
holderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 180, 160)];
}
else{
holderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 160, 240)];
}
UIImageView *imageview = [[[UIImageView alloc] initWithFrame:[holderView frame]];
[imageview setImage:imageFromPicker];
//[imageview setTag:101];
//[holderView setTag:102];
//NSLog(@"Tag By Default %d",(arc4random()%100)+10);
[holderView setTag:(int)objectDelegate.tagForHolderView];
[imageview setTag:((int)objectDelegate.tagForHolderView)+1];
[holderView addSubview:imageview];
//[imageview canBecomeFirstResponder];
UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scale:)];
[pinchRecognizer setDelegate:self];
[holderView addGestureRecognizer:pinchRecognizer];
UIRotationGestureRecognizer *rotationRecognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotate:)];
[rotationRecognizer setDelegate:self];
[holderView addGestureRecognizer:rotationRecognizer];
UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(move:)];
[panRecognizer setMinimumNumberOfTouches:1];
[panRecognizer setMaximumNumberOfTouches:1];
[panRecognizer setDelegate:self];
[holderView addGestureRecognizer:panRecognizer];
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)];
[tapRecognizer setNumberOfTapsRequired:1];
[tapRecognizer setDelegate:self];
[holderView addGestureRecognizer:tapRecognizer];
UILongPressGestureRecognizer *gestureRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(gestureHandler:)];
[holderView addGestureRecognizer:gestureRecognizer];
[holderView.layer setBorderColor: [[UIColor whiteColor] CGColor]];
[holderView.layer setBorderWidth: 3.0];
[self.view addSubview:holderView];
objectDelegate.tagForHolderView+=2;
for(UIButton *b in self.view.subviews) {
if([b isKindOfClass:[UIButton class]]) {
[self.view bringSubviewToFront:b];
}
[self.view sendSubviewToBack:imageViewForBackground];
//[holderView setHidden:YES];
}
}
如何释放它们以及在哪里调用释放方法 当您有内存问题时,如果您有一个名为
- (void)didReceiveMemoryWarning
它将被调用,并允许您释放空间。如果您使用的是ARC,只需将UIImageView设置为nil,否则,请调用:
[imageview release];
从上面添加的代码片段可以看出,您没有正确地释放对象。您拥有您
init
或retain
或copy
的每个对象,并且您有责任释放它们,除非您使用ARC。(以上代码适用于ARC)
您拥有所有手势识别器和图像视图的所有权,您应该在不再需要它们时尽快释放它们。例如<代码>图像视图对象必须在
[holderView addSubview:imageview]代码>
及
pinchRecogniter
应在
[holderView AddgestureRecognitor:PinchreRecogniter]代码>
其他手势识别器也是如此
我猜你的代码的其他部分也有类似的问题,最终应用程序会收到内存警告。我已经释放了所有对象,但它仍然会从空白屏幕删除以前的图像。你能发布你的“空白屏幕”的代码吗?不看代码就很难知道原因。