gpt4 book ai didi

iphone - 应用程序因内存使用率非常低而崩溃 iphone/iPad

转载 作者:行者123 更新时间:2023-12-03 15:49:48 25 4
gpt4 key购买 nike

我已经阅读了很多关于内存不足警告崩溃的帖子,但我无法解决我的应用程序崩溃的问题。仪器的分配显示 2-7MB 的实时字节。它永远不会超过 7 或 7.5MB,但应用程序仍然会崩溃。

我阅读了一些链接,这些链接告诉分配和事件监视器显示不同的内存使用值。如前所述,分配将显示最大 7-7.5MB,但事件监视器显示应用程序启动时大约 75MB 的使用量,当我使用该程序时,它开始增加和减少。它将上升到 110-120MB,然后减少到 75-80MB。

更多链接说要查看 VM Tracker 中的脏大小和驻留大小。当我 checkin VM Tracker 时,Dirty 大小将从 30MB 开始,并随着我使用该应用程序而开始增加。它超过 400MB。我正在使用大约 150 张图像,其中大约 70-80 张是 1024x1024 尺寸,大约 35 张是 110x110 尺寸,其余的是 3000x4000 尺寸的图像。所有这些图像最初都是 png 格式,我已经以编程方式转换为 JPG+ALPHA 并作为 Assets 添加到应用程序中。每当需要加载相应的图像时,我将 JPG+ALPHA 图像分成 16 个部分,最后将它们连接起来得到原始图像。我这样做是因为当我尝试加载分辨率为 3000x4000 的图像时,内存在分配中飙升到 40-45MB,所以使用了这种方法。此方法确保内存永远不会超过 10MB。

所有这些记录和统计数据都是使用模拟器测量的。

应用程序永远不会在模拟器上崩溃,但它会在真实设备上崩溃。我正在使用 iPad2 进行测试。

请帮我解决这个问题。过去 2 天我被困住了,看到应用程序崩溃完全沮丧。

最佳答案

这段代码正确吗?

    UIImageView* framebadgeOrAccessoryImage = [[UIImageView alloc]initWithFrame:sizeOfFrameOrAccessoriesView];
[framebadgeOrAccessoryImage setCenter:imageArea.center];
[framebadgeOrAccessoryImage setContentMode:UIViewContentModeScaleAspectFit];
[framebadgeOrAccessoryImage setImage:badgeOrAccessoryImage];
[framebadgeOrAccessoryImage setTag:iObjectTag];
[framebadgeOrAccessoryImage setObservationInfo:@"BadgeAccessories"];
[framebadgeOrAccessoryImage setExclusiveTouch:YES];

iObjectTag++;

[framebadgeOrAccessoryImage setMultipleTouchEnabled:YES];
[framebadgeOrAccessoryImage setBackgroundColor:[UIColor clearColor]];
[framebadgeOrAccessoryImage setUserInteractionEnabled:YES];

[imageArea addSubview:framebadgeOrAccessoryImage];

selectedItem = framebadgeOrAccessoryImage;

[framebadgeOrAccessoryImage release];

我使用我设置的标签在我的其他方法中使用“framebadgeOrAccessoryImage”。我是否必须像在代码的最后一行中所做的那样释放“framebadgeOrAccessoryImage”,或者在释放它后将其分配给 nil?

“framebadgeOrAccessoryImage”在这里使用名称“selectedItem”。
- (void)panRecognized:(UIPanGestureRecognizer *)gestureRecognizer
{
if(selectedItem.image && [gestureRecognizer isEnabled])
{
UIImageView *piece = selectedItem;

if ((([gestureRecognizer state] == UIGestureRecognizerStateBegan || [gestureRecognizer state] == UIGestureRecognizerStateChanged)) && [((NSString*) [piece observationInfo]) isEqualToString:@"BadgeAccessories"])
{
CGPoint translation = [gestureRecognizer translationInView:[piece superview]];
[piece setCenter:CGPointMake([piece center].x + translation.x, [piece center].y + translation.y)];
[gestureRecognizer setTranslation:CGPointZero inView:[piece superview]];

}

if ([gestureRecognizer state] == UIGestureRecognizerStateEnded ||[gestureRecognizer state] == UIGestureRecognizerStateCancelled || [gestureRecognizer state] == UIGestureRecognizerStateFailed)
{
if(CGRectContainsPoint([[self view]viewWithTag:RECYCLEBIN_TAG].frame, [gestureRecognizer locationInView:imageArea]))
{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc]init];
[objectsAdded removeObjectForKey:[NSString stringWithFormat:@"%d",selectedItem.tag]];
[pool release];
[UIView beginAnimations:NULL context:nil];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:0.4];
[UIView setAnimationDidStopSelector:@selector(propDeleted:finished:context:)];
[UIView setAnimationDelegate:self];

[selectedItem setFrame:CGRectMake(selectedItem.frame.origin.x, selectedItem.frame.origin.y, 5, 5)];
selectedItem.center = [[[self view]viewWithTag:RECYCLEBIN_TAG]center];
[UIView commitAnimations];
}
else
{
[self applyEffectOnTouch:0];
}
}
}
}

关于iphone - 应用程序因内存使用率非常低而崩溃 iphone/iPad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11631223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com