iOS - 面试总结

作者: 神灬渐入嘉靜 | 来源:发表于2019-03-02 23:38 被阅读1次
    1. ARC是在预编译期、编译期、运行时进行的代码填充?
    • ARC是一个预编译的步骤,将保留/释放/自动释放你的代码对你的报表。
    1. mmkv为什么性能有优势
    • 相比操作文件、sqlite、NSUserDefaults性能高,稳定性强。
    • mmkv使用mmap内存映射文件,实时写入效率高。
    • 数据序列化使用protobuf协议,性能和空间占用上都有不错的表现。
    • 使用简洁方便,易于理解和上手。
    1. iOS开发图片使用png jpg的区别
    • png有透明通道, jpg没有.png有手机硬解码加速 无损显示效果好
    • png加载速度快, 显示效果好
    • png 在大图片的时候会比jpg大.
    • xcode也会对png图片进行优化,jpg没有.
    1. fps怎么实现
    • CADisplay
    1. 利用runloop可以做的一些事情:
    • 监听Main Runloop的状态,在主线程空闲的时候或者合适的时候去执行一些任务。
    • 把任务拆分成一个个小任务,依次提交到Runloop里执行。而不是,一个大任务去执行。大任务的执行会导致占用线程时间过多,产生性能问题。
    • 可以自己创建一个后台线程,并且开启Runloop来等待任务或者用来专门处理某类任务。
    • 根据Runloop的Mode来提交不同的任务,然后根据状态在Mode之间切换。比如TableView中将加载图片的任务放到NSDefaultRunLoopMode模式下去处理,保证UITrackingRunLoopMode模式下界面滑动的流畅性。
    1. dispatch_barrier_async作用
      只有当栅栏函数执行完毕后才能执行后面的函数,栅栏函数不能使用全局并发队列

    2. 单例调用alloc/new方法创建出的对象内存空间一致吗?
      改写allocWithZone使得alloc出的空间一致

    static LPCTestClass *instance = nil;
    
    + (instancetype)sharedInstance
    {
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            instance = [[[self class] alloc] init];
        });
        return instance;
    }
    
    + (instancetype)allocWithZone:(struct _NSZone *)zone
    {
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            instance = [super allocWithZone:zone];
        });
        return instance;
    }
    
    1. 常用的设计模式
    • 设计模式:并不是一种新技术,而是一种编码经验,使用比如java中的接口,iphone中的协议,继承关系等基本手段,用比较成熟的逻辑去处理某一种类型的事情,总结为所谓设计模式。面向对象编程中,java已经归纳了23种设计模式。

    • mvc设计模式 :模型,视图,控制器,可以将整个应用程序在思想上分成三大块,对应是的数据的存储或处理,前台的显示,业务逻辑的控制。 Iphone本身的设计思想就是遵循mvc设计模式。其不属于23种设计模式范畴。

    • 代理模式:代理模式给某一个对象提供一个代理对象,并由代理对象控制对源对象的引用.比如一个工厂生产了产品,并不想直接卖给用户,而是搞了很多代理商,用户可以直接找代理商买东西,代理商从工厂进货.常见的如QQ的自动回复就属于代理拦截,代理模式在iphone中得到广泛应用.

    • 单例模式:说白了就是一个类不通过alloc方式创建对象,而是用一个静态方法返回这个类的对象。系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为,比如想获得[UIApplication sharedApplication];任何地方调用都可以得到 UIApplication的对象,这个对象是全局唯一的。

    • 观察者模式: 当一个物体发生变化时,会通知所有观察这个物体的观察者让其做出反应。实现起来无非就是把所有观察者的对象给这个物体,当这个物体的发生改变,就会调用遍历所有观察者的对象调用观察者的方法从而达到通知观察者的目的。

    • 工厂模式:可以简单概括为同类型不同型号的产品有各自对应的工厂进行生产。好比如iPhone手机旗下有iPhoneX及iPhone8两种型号的手机,iPhoneX有自己iPhoneX的专属工厂进行生产,而iPhone8有自己iPhone8的专属工厂进行生产。两条生产线没有交集互不影响,后期如果新增或废弃相关类型的产品也不会影响到原有的生产线。

    9.iOS应用程序间怎么实现共享数据

    • App Groups:
    - (void)setAppGroup
    {
        NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.godlike.shareData"];
        [defaults setObject:@"data" forKey:@"yourKey"];
    }
    - (void)getByAppGroup
     {
        NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.godlike.shareData"];
        NSString *content = [defaults objectForKey:@"yourKey"];
    }
    
    • 钥匙串: 通常每个应用程序只允许访问自己在keychain中保存的数据,不过假如你使用同一个证书的话,不同的app也可以通过keychain来实现应用间的数据共享
    • Custom URL Scheme
    • 剪贴板
        UIPasteboard *pasteboard = [UIPasteboard pasteboardWithName:@"customPasteboard" create:YES];
        pasteboard.string = @"shareData";
    
        UIPasteboard *pasteboard = [UIPasteboard pasteboardWithName:@"customPasteboard" create:NO];
        NSString *content = pasteboard.string;
    
    1. 沙盒路径下的文件夹作用
    • Document文件夹:用来保存应由程序运行时生成的需要持久化的数据,iTunes会自动备份该目录。
    • Library文件夹:用来存储程序的默认设置和其他状态信息,iTunes也会自动备份该目录。
    • Library/Caches: 用来存放缓存文件,iTunes不会备份此目录,此目录下的文件不会在程序退出后删除。
    • Library/Preferences: 用来存储用户的偏好设置,iOS的setting(设置)会在这个目录中查找应用程序的设置信息,iTunes会自动备份该目录,通常这个文件夹都是由系统进行维护的,建议不要操作他。
    • tmp:保存应用程序的临时文件夹,使用完毕后,将相应的文件从这个目录中删除,如果空间不够,系统也可能会删除这个目录下的文件,iTunes不会同步这个文件夹,在iPhone重启的时候,该目录下的文件会被删除。
    1. SDWebImage 概论
    • 提供了一个 UIImageView 的 category 用来加载网络图片并且对网络图片的缓存进行管理
    • 采用异步方式来下载网络图片
    • 采用异步方式,使用 memory+disk 来缓存网络图片,自动管理缓存。
    • 支持 GIF 动画
    • 支持 WebP 格式
    • 同一个 URL 的网络图片不会被重复下载
    • 失效的 URL 不会被无限重试
    • 耗时操作都在子线程,确保不会阻塞主线程
    • 使用 GCD 和 ARC
    • 支持 Arm64

    相关文章

      网友评论

        本文标题:iOS - 面试总结

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