【发布时间】:2016-10-25 10:19:42
【问题描述】:
我正在尝试做一些实验。
- (IBAction)btn1Action:(id)sender {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
[self performSegueWithIdentifier:@"popvc2id" sender:self];
});
NSLog(@"TAP");
}
当按钮点击时执行segue需要1秒,当再次点击此按钮时会触发segue两次,因此将创建ViewController的两个实例。
在仪器中我可以看到两个实例,但其中一个是 leaked VC object。
现在我想做的是
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
VC2 *vc2 = [segue destinationViewController];
[ary addObject:vc2];
if(ary.count > 1) {
VC2 *vc = (VC2*)ary[1];
vc = nil;
[ary removeObjectAtIndex:1];
}
[ary removeAllObjects];
NSLog(@"-> %@", vc2);
}
记录VC objects并尝试销毁第二个obj,这样可以防止内存泄漏。
但它不起作用,我该如何解决它?
【问题讨论】:
-
使用 bool FLAG 来防止第二次点击。在调用 dispatch_after 之前检查标志
-
所以问题是没有执行两次点击?
-
将局部变量设置为
nil通常不会将其从内存中删除。您不能强制 iOS/ARC 释放对象。
标签: ios objective-c memory-leaks viewcontroller