ios-dismissViewControllerAnimated有延迟

问题描述

dismissViewControllerAnimated有延迟

dismissViewControllerAnimated:completion:在应用中运行正常,就是不知道为什么出现了几秒钟的延迟:

[api loginWithUsername:[dict objectForKey:@"username"] andPassword:[dict objectForKey:@"password"] andSuccessBlock:^(id json) {
    NSLog(@"DONE... %@", [json objectForKey:@"status"]);
    NSString *status = [json objectForKey:@"status"];
    if([status isEqualToString:@"ok"]){
        app.user = [json objectForKey:@"data"];
        [self dismissViewControllerAnimated:YES completion:nil];
    }else{
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"could not log you in" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
        [alert show];
    }
}];

在控制台可以看见DONE... ok。,意味着回调block执行正常,但是接下来需要三四秒钟延迟视图才能最终被dismiss。

怎么解决这个延迟问题?谢谢

解决方案

如果你不能保证UI代码运行在主线程中,它可能就运行到其他地方去了,这样的话会出现几秒钟的延迟。

添加下面的代码可以让dismissal运行在主线程中:

dispatch_async(dispatch_get_main_queue(), ^{
    [self dismissViewControllerAnimated:YES completion:nil]
});

解决方案二:

代码只给了一部分,无法看出什么问题。
从这个函数名上推测:应该是使用用户名密码登录时请求了网络连接,视图dismiss的这个三四秒中的延迟应该是网络连接造成的。而这个网络连接没有使用异步,或者是使用了异步连接但是SuccessBlock里的代码段只会在网络连接请求成功后调用。

建议将dismiss放到别的地方去。

时间: 2024-09-17 02:33:56

ios-dismissViewControllerAnimated有延迟的相关文章

ios-需要在IOS中设置延迟功能

问题描述 需要在IOS中设置延迟功能 需要一个延时器,进行23秒的延迟然后执行函数.应该怎么实现?用不用NSTimer? 解决方案 performSelector: withObject: afterDelay: 解决方案二: 简单点的话,使用performSelector: withObject: afterDelay: 方法 [self performSelector:@selector(delayMethod:) withObject:nil afterDelay:23];

用 Xamarin 和 Visual Studio 构建 iOS 应用

本文讲的是用 Xamarin 和 Visual Studio 构建 iOS 应用, 当创见一个 iOS 的应用程序的时候,开发者们一贯倾向于使用那些由 Apple 公司提供的编程语言和 IDE: Objective-C /Swift 和 Xcode.然而,这并不是唯一的选择 - 你还可以通过使用很多其他的编程语言和框架去创建一个 iOS 应用程序. Xamarin 是最热门的选择方式之一,它是一个跨平台的开发框架,允许你使用 C# 和 Visual Studio 开发 iOS, Android,

access-IOS dismissViewControllerAnimated,EXEC_BAD_ACCESS

问题描述 IOS dismissViewControllerAnimated,EXEC_BAD_ACCESS 遇到个实在没法解决的问题.简单说是这样的:我用XIB自定义了一个带有返回按钮的UIView,并且将它绑定到了一个类上,然后在storyBoard中直接引用. 现在的问题是,我把那个按钮用IBAction关联到一个方法上,并且在其中写了两行代码用于结束当前ViewController UIViewController * controller = [Helper findViewContr

iOS延迟执行方法详解_IOS

近日学习了延迟执行的几种方法,分享一下. 1.performSelector(NSObject)方法  2.NSTimer方法  3.GCD方法  4.sleep(NSThread)方法 延迟执行代码: - (void)delayDo : (id)sender { NSLog(@"do:%@",sender); } 1.performSelector(NSObject)方法 这是iOS中常用的一种延迟执行方法. 特点:这个方法必须要在主线程中使用.可以传递参数.可以取消操作,不能暂停.

IOS 解决UIButton 点击卡顿/延迟的问题_IOS

前言 一开始还以为代码写的有问题,点击事件里面有比较耗时卡主线程的代码,逐一删减代码发现并不是这么回事. 正文 和参考文章里说的情况不完全相同,UIButton 并没有放在 UIScrollView 或 UITableView 上,但是 ViewController 是支持滑动返回的. ------------------华丽的分割线,搜索猜测解题中------------------ 解决办法:也没什么好办法,换成 ImageView 加 UITapGestureRecognizer 吧,另外

对比分析iOS延迟执行的4种方式_IOS

最近学习了延迟执行的几种方法,分享一下: 1.performSelector(NSObject)方法  2.NSTimer方法  3.GCD方法  4.sleep(NSThread)方法 一.performSelector方法: 复制代码 代码如下: [self performSelector:@selector(delayMethod) withObject:nil afterDelay:1.0f]; 1.特点: 此方式要求必须在主线程中执行,否则无效. 是一种非阻塞的执行方式, 暂时未找到取

iOS中 LGLAlertView 提示框的实例代码_IOS

使用与iOS8 以后,只是把系统的UIAlertController进行了封装,省的每次用的时候要写很多的代码.封装后只需要一句代码即可 , deome 地址 :https://github.com/liguoliangiOS/LGLAlertView.git 上代码LGLAlertView.h: #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> typedef NS_ENUM(NSInteger, LGLAlert

iOS - XMPP 的使用

1.XMPP XMPP 是一个基于 Socket 通信的即时通讯的协议,它规范了即时通信在网络上数据的传输格式,比如登录,获取好友列表等等的格式.XMPP 在网络传输的数据是 XML 格式. 开发架构: iOS 框架:XMPPFramework 服务器:Openfire 数据库:MySQL 2.XMPPFramework 框架简介 2.1 XMPPFramework 简介 XMPPFramework 是一个 OS X/iOS 平台的开源项目,使用 Objective-C 实现了 XMPP 协议(

IOS UIPageControl(分页控制器) 用法总结

UIPageControll 是继承于UIControl的一个IOS系统UI控件,可以提供给开发者设计分页效果的功能. 初始化方法 UIPageControl * page = [[UIPageControl alloc]initWithFrame:CGRectMake(100, 100, 100, 100)]; 设置控制器页数(默认为0) @property(nonatomic) NSInteger numberOfPages;   设置当前所在页码 @property(nonatomic)