我是一个初学者,仍在尝试弄清楚如何阅读本文。 有 3 个自定义 View ,一开始我分配第一个。 然后第二个/取消分配第一个,然后第三个/取消分配第二个。
我在释放每个 View 之前清空/清空所有数组,所以从我看来,每次分配 View 时保留的所有内存,每当我释放/清空它们时都应该释放,但在图表中它不断增加,我不这样做根本没有看到任何内容被发布。
应该是这样的吗?我将委托(delegate)、数组、字典等全部清零。
-(void)firstTOsecond {
[self.first removeFromSuperview];
self.first.delegate = nil;
self.first = nil;
self.second = [[Second alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
[self.view addSubview:self.second];
self.second.delegate = self;}
-(void)secondTOthird {
[self.second removeFromSuperview];
self.second.delegate = nil;
self.second = nil;
self.third = [[Third alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
[self.view addSubview:self.third];
self.third.delegate = self;}
编辑
在 First.m/Second.m/Third.m
-(instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
self.buttonStartFrame = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"buttonStartFrame"]];
[self addSubview:self.buttonStartFrame];
self.buttonStartFrame.userInteractionEnabled = YES;
self.buttonStartButton = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"buttonStartDefault"]];
[self.buttonStartFrame addSubview:self.buttonStartButton];
self.buttonStartButton.userInteractionEnabled = YES;
self.labelStart = [[UILabel alloc]init];
[self.buttonStartButton addSubview:self.labelStart];
self.labelStart.textColor = [UIColor darkGrayColor];
self.labelStart.text = @"Start";
}
return self;}
最佳答案
内存泄漏可能是因为您在可以更新的情况下不断创建新的 View 元素。您可以创建辅助方法以避免分配新 View ,并在主线程上更新 View 元素
- (void)limitedUpdateTextColorView:(NSDictionary *)somethingCache {
self.labelStart.textColor = [somethingCache valueForKey:@"bar"];
self.labelStart.text = [somethingCache valueForKey:@"foo"];
}
关于ios - 分配时的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37265967/