页面管理

简介: 页面管理

页面管理决定一个app的质量。没有中央页面管理组件,轻者造成实现页面处理麻烦,每个应用都要实现自己自己的页面管理,不利于实现页面状态机;重者容易产生页面页面循环引用,不能及时释放,通知事件没有正常移除造成崩溃。

正确的中央页面管理组件,要达到像这样的效果,调用一个url地址就能实现页面跳转和实现页面跳转时的动画。怎么实现实时移除上个页面呢?就是进入另一个新页面,发送通知,上一个页面接到通知从UINavigationController移除该页面。在页面销毁函数中,增加像下面的代码一样移除通知:

- (void)dealloc
{
    _mapView.delegate = nil;
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    NSLog(@"dealloc");
}

在arc机制下,一旦你使用了定时器,就是你离开页面是把定时器指针置为空,你的页面也不能实时销毁。完美解决方案是使用NSTimer+YYAdd这个库来实现定时器的调用。示例代码:

        if (!(_timer.isValid)) {
            @weakify(self);
            self.timer = [NSTimer scheduledTimerWithTimeInterval:1.f block:^(NSTimer * _Nonnull timer) {
                @strongify(self);
                [self readmis];
            } repeats:YES];
            [self.timer setFireDate:[NSDate distantPast]];

        }
        else
        {
            [_timer setFireDate:[NSDate distantPast]];
        }
//读秒
-(void)readmis
{
    if(self.sendVerificationCodeWaitTime > 0)
    {
        self.sendVerificationCodeWaitTime--;
    }

    if (self.sendVerificationCodeWaitTime == 0)
    {
        self.repeatBtn.enabled=YES;
        [self.repeatBtn setTitleColor:[UIColor colorWithHexString:@"0X0F9B70"] forState:UIControlStateNormal];
        [self.repeatBtn setTitle:@"请重新发送" forState:UIControlStateNormal];
        self.repeatBtn.userInteractionEnabled = YES;
        [self.timer setFireDate:[NSDate distantFuture]];
    }
    else
    {
        [self.repeatBtn setTitleColor:[UIColor colorWithHexString:@"0X8A9399"] forState:UIControlStateNormal];
        NSString*timeStr=[NSString stringWithFormat:@"%lu秒后重试",(unsigned long)self.sendVerificationCodeWaitTime];
        self.repeatBtn.enabled=NO;
        //    这样设置不会闪烁
        self.repeatBtn.titleLabel.text= timeStr;
        [self.repeatBtn setTitle:timeStr forState:UIControlStateDisabled];
        self.repeatBtn.userInteractionEnabled = NO;
    }
    self.repeatBtn.titleLabel.textAlignment = NSTextAlignmentRight;
    self.repeatBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentRight;
}

我们使用是自己做的页面跳转组件,页面跳转的示例代码如下:

            [YXRouter openURL:@"gb://test" completion:^(id result) {
                [[NSNotificationCenter defaultCenter] postNotificationName:orderPrepareEvalute object:nil];
            }];

再具体的不便于近一步说了,那涉及公司技术秘密了。

做程序猿的就要有day day up的觉悟,不进则退。

现在比较时髦的技术是mmvvm与ReactiveCocoa,布局第三方库(如:SDAutoLayout。苹果自带的布局库操作太不方便了,特别是storyboard想动态修改它太不方便了,并且会严重增大app),混合开发(React Native等),指定范围或特定人群试用新功能,埋点,热修复,页面下发管理中心,无线网关(应用启动建立https的ssl隧道,需要证书认证,并保存会话信息到内存中。当认证成功后,ssl隧道断开(,再发送https请求都携带会话信息,当网关收到这样的https请求并且核对会话信息正确,不再进行证书认证直接建立通道),聚合层(多个不相关接口合并成一个接口),懒加载,无线配置中心(服务器下发配置中心数据更新消息,客户端解析消息,根据解析的消息结果来决定是否向服务器下载数据),模块化(私有库),git工作流,jenkins自动打包上传,混合编程(objec c和c ++混合编程,如:通用长连接库用c++写,安卓和苹果客户端都能调用),swift。


目录
相关文章
|
缓存 运维 Shell
幻兽帕鲁爆内存优化方案
最近有很多小伙伴反馈说4C16G的服务器玩时间久了经常出现内存过满自动重启的情况,现在总结下linux和windows系统下怎么进行优化。
|
安全 Java 测试技术
婚恋交友网站 毕业设计 JAVA+Vue+SpringBoot+MySQL(一)
婚恋交友网站 毕业设计 JAVA+Vue+SpringBoot+MySQL
523 0
|
10月前
|
运维 网络安全 网络架构
IEPL与IPLC国际专线的区别介绍
IPLC(国际私有租用线路)和IEPL(国际以太网专线)均为企业提供跨国端到端的通信线路服务。IPLC基于SDH/DDN技术,提供专有带宽连接,支持多种业务传输,具备高可靠性和灵活性。IEPL则基于MSTP平台,采用GFP封装,提供以太网接口的增强型专线服务,具有更高的灵活性、安全性及成本效益,适合需要高带宽和低延迟的业务场景。两者主要区别在于技术基础、接口类型及成本结构。
1700 70
|
人工智能 JSON 算法
不是吧?这么好用的开源标注工具,竟然还有人不知道…
LabelU是一款专为AI项目设计的强大多模态数据标注工具,支持图像、视频、音频等多样化数据类型。它提供灵活的标注工具与自定义配置选项,让用户根据需求定制高效标注流程。特色功能包括一键载入预标注结果以简化修正工作,以及支持JSON、COCO等多种格式的导出选项。LabelU既可本地部署确保数据安全,也提供在线版本方便快速上手。此外,OpenDataLab还开源了Label-LLM对话标注工具和MinerU文档处理工具,进一步丰富了数据准备的工作流。欢迎访问[LabelU](https://github.com/opendatalab/labelU)了解更多详情,并为这些优秀工具点赞支持!
859 0
不是吧?这么好用的开源标注工具,竟然还有人不知道…
|
Rust 安全 物联网
Rust在系统级编程中的独特优势
本文深入探讨了Rust在系统级编程中的独特优势,包括其内存安全、高性能、并发编程能力以及与其他语言的互操作性。通过实际案例,展示了Rust如何在操作系统、嵌入式系统、网络编程等领域发挥重要作用,并预测了Rust在未来系统级编程中的发展趋势。
|
缓存 JavaScript 前端开发
vue3+elementplus后台管理系统,实现用户登录
vue3+elementplus后台管理系统,实现用户登录
|
C++ 开发者
C++一分钟之-概念(concepts):C++20的类型约束
【7月更文挑战第6天】C++20引入了Concepts,提升模板编程的精确性和可读性。概念允许设定模板参数的编译时约束。常见问题包括过度约束、不完整约束及重载决议复杂性。要避免这些问题,需适度约束、全面覆盖约束条件并理解重载决议。示例展示了如何定义和使用`Incrementable`概念约束函数模板。概念是C++模板编程的强大力量,但也需谨慎使用以优化效率和代码质量。
239 0
|
开发框架 安全 .NET
windows权限维持
windows权限维持
229 1
|
机器学习/深度学习 人工智能 算法
【数据编制架构】Data Fabric 架构是实现数据管理和集成现代化的关键
【数据编制架构】Data Fabric 架构是实现数据管理和集成现代化的关键
|
Arthas 监控 Java
【Arthas】初识Arthas,安装使用
【Arthas】初识Arthas,安装使用
【Arthas】初识Arthas,安装使用