我有一个自定义UIView
称为ActivityDetailView
我实例,然后父视图控制器内添加到滚动视图。 当该自定义视图分配,它更多的内存每次占用约1MB和仪器的显示出存储永远不会被释放,即使视图和父视图控制器各自有各自dealloc
被调用的方法。 我收到内存警告和应用程序最终被杀,所以我明明做错事。
更新w是关于地图视图/信息的原因,但我需要一个修复
在自定义ActivityDetailView
笔尖文件,则存在被放大和周围的用户的位置为中心的地图视图。 当我删除从笔尖此地图视图,以便它不会在屏幕上画,内存分配问题就走了。 然而,我显然需要在地图视图。 在地图视图超出范围,为什么不公布地图视图的数据?
仅存在1 ActivityDetailView
和1个ActivityDetailViewController
活着当视图是显示。 当我弹出堆栈的看法,他们不再生活。 内存如何保持增长,即使对象正在被杀害通过仪器显示没有意义。 如果家长的意见将被释放,为什么没有在地图视图数据被释放?
我在做什么错误或我应该怎么检查?
这是自定义视图:
@interface ActivityDetailView ()
{
CLLocation *location;
__weak id parentViewController;
int scrollViewX;
ImageUtility *imageUtility;
}
@end
@implementation ActivityDetailView
-(id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
NSArray *xibViews = [[NSBundle mainBundle] loadNibNamed:@"ActivityDetailView" owner:nil options:nil];
if ([xibViews count] < 1) return nil;
ActivityDetailView * xibView = [xibViews objectAtIndex:0];
[xibView setFrame:frame];
self = xibView;
}
return self;
}
- (id)initWithLocation:(CLLocation *)loc parentController:(id)parent
{
self = [self initWithFrame:CGRectMake(0, 0, 320, 1000)];
if (self)
{
imageUtility = [ImageUtility sharedManager];
location = loc;
parentViewController = parent;
scrollViewX = 0;
[self centerMapForActivityLocation];
[self addPhotoButtonWithImageNamed:@"addActivityPhoto.png" target:parentViewController selector:@selector(addPhotoToActivity:)];
}
return self;
}
- (void)dealloc
{
NSLog(@"ActivityDetailView was dealloced");
}
在父视图控制器:
@interface ActivityDetailViewController ()
{
ActivityDetailView *detailView;
}
@end
@implementation ActivityDetailViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Some code left out for clarity
[self setupView];
}
- (void)didReceiveMemoryWarning
{
NSLog(@"Purging image cache");
[[ImageUtility sharedManager] purgeCache];
}
- (void)dealloc
{
// These essentially do nothing to help the problem
detailView.mapView = nil;
[detailView removeFromSuperview];
detailView = nil;
self.scrollView = nil;
NSLog(@"ActivityDetailViewController was dealloced");
}
- (void)setupView
{
// Add the activity detail view to the scroll view
detailView = [[ActivityDetailView alloc] initWithLocation:self.activityLocation parentController:self];
[self.scrollView addSubview:detailView];
self.scrollView.contentSize = detailView.frame.size;
// Setup the map view
detailView.mapView.delegate = self;
MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init];
annotation.coordinate = self.activityLocation.coordinate;
[detailView.mapView addAnnotation:annotation];
if (self.activity.mapImageName) {
detailView.mapView.scrollEnabled = YES;
detailView.mapView.zoomEnabled = YES;
} else {
detailView.mapView.scrollEnabled = NO;
detailView.mapView.zoomEnabled = NO;
}
// Add the weather area to the view
dayView = [[DailyButtonView alloc] initWithFrame:CGRectMake(0, -17, 60, 70)];
dayView.hidden = YES;
[detailView.weatherView addSubview:dayView];
}
下面是从仪器显示,大多数的存储器是从笔尖加载的图像
我没有什么此刻缓存。 的观点基本上是与它内部的一个MapView和一些标签和几个表视图滚动型。 意见表中不填充任何东西,我不会比滚动视图的背景图像之外的视图中加载任何图片,但是当认为确实应该得到释放。