我的应用程序存在问题:当互联网连接不良时,viewWillAppear
的结尾与viewDidAppear
的开头之间会出现延迟(约4秒)。但是当互联网正常时,问题就不会发生!
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[_btnMenu setBadgeTextColor:[UIColor whiteColor]];
[self updateNotification];
[_btnMenu setBadgeEdgeInsets:UIEdgeInsetsMake(15, 0, 0, 8)];
[_btnMenu setHideWhenZero:YES];
[self setNeedsStatusBarAppearanceUpdate];
}
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
[WSProgressHUD dismiss];
}
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[super setUpLocalizationString];
willRoute = NO;
// delay single tap recognition until it is clearly not a double
[_mapBoxView removeGestureRecognizer:taptap];
[_mapBoxView removeGestureRecognizer:doubleTap];
doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:nil];
doubleTap.numberOfTapsRequired = 2;
[self.mapView addGestureRecognizer:doubleTap];
taptap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissCallout:)];
[taptap requireGestureRecognizerToFail:doubleTap];
[taptap requireGestureRecognizerToFail:_longPress];
taptap.delegate = self;
[self.mapBoxView addGestureRecognizer:taptap];
GoongInstance.mapBoxView = _mapBoxView;
self.navigationController.navigationBarHidden = YES;
[self.view layoutIfNeeded];
[self.view updateConstraints];
_searchTextField.delegate = self;
[_searchTextField resignFirstResponder];
if (!isPresentingOtherVC) {
_radialMenuYConstraint.constant = -70;
_dropPinViewHeightConstraint.constant = 0;
_btnWarning.hidden = YES;
[_mapBoxView setScrollEnabled:YES];
[_mapBoxView setZoomEnabled:YES];
[_mapBoxView setRotateEnabled:YES];
[_mapBoxView setPitchEnabled:YES];
[_mapBoxView removeFromSuperview];
[self.mapView addSubview:_mapBoxView];
_mapBoxView.frame = CGRectMake(0, 0, _mapView.frame.size.width, _mapView.frame.size.height);
_mapBoxView.delegate = self;
[self.view layoutIfNeeded];
}
}
答案 0 :(得分:2)
我确信,您正在阻止应用程序执行的主线程上执行某些操作(例如Internet检查或任何其他网络操作)。做互联网检查后台线程。
<强>目标C 强>
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// DO the internet checking or any other network operations here
});
Swift 3.0
DispatchQueue.global(qos: .background).async {
print("This is run on the background queue")
// DO the internet checking or any other network operations here
}
答案 1 :(得分:0)
请使用仪器找出哪些花费更多时间。如果基于互联网的东西,然后首先检查互联网连接,然后去基于互联网的声明(如果poosble在背景上)
检查互联网: