Ios Drawrect内存泄漏

Ios Drawrect内存泄漏,ios,memory,drawrect,Ios,Memory,Drawrect,我正在对一个UIView进行子类化,以便在视图上绘制自定义图形,视图本身将非常大,可以达到10000 x 10000,我们使用这个大视图,以便能够适应高水平的缩放。我尝试了各种方法在视图上绘制,要么覆盖drawRect:,要么添加一个子层。但是,当子层处于缩放或滚动状态时,运动会变得急促,并有明显的滞后。这是由于子层被重新绘制了很多 使用drawRect:但是,除了覆盖drawRect:时内存使用量很大,对于2000 x 2000大小的视图,需要70.5 mb(我调用[super-drawRec

我正在对一个
UIView
进行子类化,以便在视图上绘制自定义图形,视图本身将非常大,可以达到10000 x 10000,我们使用这个大视图,以便能够适应高水平的缩放。我尝试了各种方法在视图上绘制,要么覆盖
drawRect:
,要么添加一个子层。但是,当子层处于缩放或滚动状态时,运动会变得急促,并有明显的滞后。这是由于子层被重新绘制了很多

使用
drawRect:
但是,除了覆盖
drawRect:
时内存使用量很大,对于2000 x 2000大小的视图,需要70.5 mb(我调用
[super-drawRect:rect]
,没有任何好处)。如果我不覆盖drawrect,我可以将自定义视图设置为我尝试过的任何大小,甚至30000 x 30000,内存方面没有问题。但是,只要
drawRect:
获得覆盖,就会发生内存泄漏。我的项目是基于ARC的,当使用
drawRect:
绘制自定义形状时,我对性能非常满意,所以我想知道是否有办法堵塞内存泄漏?或者稍微优化一下

非常感谢您的帮助,如果我没有澄清什么,请告诉我

问候

主/默认viewcontroller.h

#import <UIKit/UIKit.h>
#import "P10Maps.h"

@interface P10ViewController : UIViewController {
    IBOutlet UIScrollView *scrollView;

}
@end
UIview.h和.m的子类

#import <UIKit/UIKit.h>
#import "P10ViewController.h"
@interface P10Maps : UIView

@end

#import "P10Maps.h"

@implementation P10Maps
int countryID;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    NSLog(@"frame %@", NSStringFromCGRect(frame));
    [self drawPaths];
    if (self) {
        //self.opaque = YES;
        self.backgroundColor = [UIColor whiteColor];

    }
    return self;
}


// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.

- (void)drawRect:(CGRect)rect
{
    [super drawRect:rect];
}

@end
#导入
#导入“P10ViewController.h”
@接口P10Map:UIView
@结束
#导入“P10Map.h”
@P10Map的实现
国际国家ID;
-(id)initWithFrame:(CGRect)帧
{
self=[super initWithFrame:frame];
NSLog(@“frame%@”,NSStringFromCGRect(frame));
[自绘制路径];
如果(自我){
//self.不透明=是;
self.backgroundColor=[UIColor whiteColor];
}
回归自我;
}
//仅覆盖drawRect:如果执行自定义绘图。
//空实现会对动画期间的性能产生不利影响。
-(void)drawRect:(CGRect)rect
{
[超级drawRect:rect];
}
@结束

因为你可能是对的,但也可能有其他的事情发生。询问者发布代码也是一种很好的做法。并非所有解决方案都会如此“明显”。对于2kx2k,备份存储可能预期为16MB,而不是70.5MB,因此可能存在另一个问题。可能需要一些自动释放池。对于10k x 10k,可能需要某种类型的平铺。我已经用代码进行了更新,非常感谢任何帮助如果只在其中调用super,为什么要覆盖drawRect???你想用drawRect做什么??正如注释所说:
//如果执行自定义绘图,则仅重写drawRect://空的实现会对动画期间的性能产生不利影响。
我实际上已经在drawrect中绘制了bezier路径,但绘制它们不会影响内存消耗(这就是为什么我没有将其包含在代码中的原因),只要我出于任何目的覆盖drawrect,内存泄漏就开始发生。关于[super drawrect],我在文档中读到(如果我没有误解的话),调用它会导致内存问题。
#import <UIKit/UIKit.h>
#import "P10ViewController.h"
@interface P10Maps : UIView

@end

#import "P10Maps.h"

@implementation P10Maps
int countryID;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    NSLog(@"frame %@", NSStringFromCGRect(frame));
    [self drawPaths];
    if (self) {
        //self.opaque = YES;
        self.backgroundColor = [UIColor whiteColor];

    }
    return self;
}


// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.

- (void)drawRect:(CGRect)rect
{
    [super drawRect:rect];
}

@end