简历Q&A

作者: MoneyRobber | 来源:发表于2019-02-17 19:54 被阅读0次

什么是MVC

MVC:Model应该包括数据,和数据的操作,View只应该有UI,不应该处理任何业务逻辑,以及数据填充,Controller处理Model与View的交互以及其他逻辑,在实际开发中我们经常将Model传递给View,比如给tableviewCell填充数据,我们所用的并不是标准的理论MVC

什么是MVVM

http://www.cocoachina.com/articles/15823

说说你适配了哪些地方

刘海屏适配:
对没有navigationbar的页面顶部视图空出44像素
页面底部控件空出来34
全屏的tableview底部空出34的contentinset
(全局的东西通过修改宏实现)
ios11之后提供了safeAreaLayoutGuide,safeAreaInsets可以用来做安全区域的布局

ios11适配:
tableview设置offset达不到想要的结果和mjrefresh加载更多时候跳动,设置estimatedRowHeight,estimateSectionHeaderHeight,estimateSectionFooterHeight禁止tableview的估算达到自己想要的效果
MGSwipeTableCell出现崩溃,升级最新版就行

首页弹出框Manager的重构

原来设计:
最开始首页只有3,4个弹框,使用AlertManager管理,这些弹出框的网络请求,逻辑判断全部在AlertManager里面,弹出框展示是线性的,随着首页功能的不断增加,增加更多弹框,之前的弹框顺序也有变化,AlertManager代码变得不可维护

现在设计:
WMStartAlertQueue处理弹出框通用逻辑,弹出框自己管理自己的数据请求,数据展示,如果当前弹出框数据展示结束,调用下面代码

self.showOver = YES;
[[WMStartAlertQueue sharedInstance] showAlert];

关键代码

/**
 获取网络数据
 */
- (void)getNetData {
    for (WMStartAlertNewBaseModel *model in self.array) {
        [model getNetData];
    }
}
/**
 显示弹出框
 */
- (void)showAlert {
    //广告图加载没有结束,直接返回
    if (!self.adOver) {
        return;
    }
    WMStartAlertNewBaseModel *model;
    for (WMStartAlertNewBaseModel *obj in self.array) {
        if (obj.showOver == NO) {
            model = obj;
            break;
        }
    }
    if (model.getData) {
        [model showAlert];
    }
}

WMStartAlertNewBaseModel

@interface WMStartAlertNewBaseModel : NSObject
@property (nonatomic, assign) BOOL getData;//是否已经获取到数据,默认NO
@property (nonatomic, assign) BOOL showOver;//是否显示结束,默认NO

/**
 获取网络数据
 */
- (void)getNetData;

/**
 显示弹出框
 */
- (void)showAlert;
@end

WMStartAlertQueue

@interface WMStartAlertQueue : NSObject
@property (nonatomic, strong) UIViewController *viewController;//载体
@property (nonatomic, assign) BOOL adOver;//广告图是否加载完成


+ (instancetype)sharedInstance;
- (void)addObject:(id)obj;
- (void)insertObject:(id)obj;

/**
 获取网络数据
 */
- (void)getNetData;

/**
 显示弹出框
 */
- (void)showAlert;

/**
 断开执行链
 */
- (void)breakChain;

调用者

WMStartAlertQueue *alertQueue = [WMStartAlertQueue sharedInstance];
alertQueue.viewController = self;
WMVersionUpdateModel *versionUpdate = [WMVersionUpdateModel new];
self.colorfulEggModel = [WMColorfulEggModel new];
WMNewUserModel *newUser = [WMNewUserModel new];
WMPushAlertModel *pushAlert = [WMPushAlertModel new];
WMPrivacyModel *privacyModel = [WMPrivacyModel new];
[alertQueue addObject:versionUpdate];
[alertQueue addObject:privacyModel];
[alertQueue addObject:self.colorfulEggModel];
[alertQueue addObject:newUser];
[alertQueue addObject:pushAlert];
[alertQueue getNetData];

layout动画怎么做

在UIView 的animationBlock里面添加layoutIfNeeded(立即刷新)/setNeedsLayout(下个刷新循环)

项目中具体做过哪里的性能优化

如何查找启动速度慢的原因

  • pre main阶段,系统加载可执行文件,加载动态库,Xcode 中 Edit scheme -> Run -> Auguments 将环境变量 DYLD_PRINT_STATISTICS 设为 1,控制台就能打印出pre main的时间,一般来说大部分时间占用都是动态库
  • main阶段,didFinishLaunchingWithOptions,HomeViewController的viewDidLoad ViewWillAppear,可以通过instruments的time profile去检测这几个函数里面的耗时操作

首页启动速度优化

  • 把不必要的初始化操作放到子线程去做,比如某些三方sdk的初始化
  • 把主页面不是必须在viewDidLoad,viewWillAppear里面执行的操作,放到后面去执行,例如viewDidAppear
  • 可以懒加载的对象,进行懒加载

相关文章

  • 简历Q&A

    什么是MVC MVC:Model应该包括数据,和数据的操作,View只应该有UI,不应该处理任何业务逻辑,以及数据...

  • 《拖延心理学》1/2

    以Q&A笔记的形式进行分享,什么是Q&A笔记呢? Q&A是由“问题部分”和“答案部分”组成, 以一问一答的形式对知...

  • [ WWDC2018 ] - WWDC Lab:哪些是我们最关心

    WWDC Lab Q&A WWDC期间每天都会有苹果工程师现场答疑活动,这种活动叫Lab。以下是我们的Q&A Q:...

  • QReply - Knowledge world

    Quest your answer is a Q&A platform that empowers people ...

  • 胶原蛋白Q&A

    常见补充方式有如下几种: Q&A

  • Q&A的重要性

    Q&A的重要性Scout Q&A是Listing权重的重要影响因素,而不仅仅是标题、search terms和re...

  • SQL|创建表 JOIN 视图

    Q&A:如何实现多个表链式连接?

  • LayaOne Sharding

    Sharding Q&A Your paper mentioned there is "dynamic shard...

  • Q&A

    Java基础 List 和 Set 的区别 基础 均继承接口Collection(除这两还有queue)、 Lis...

  • Q&A

    1、为什么偏爱列向量?

网友评论

      本文标题:简历Q&A

      本文链接:https://www.haomeiwen.com/subject/exkneqtx.html