1. iOS 面试题-2019.下

    简要说一下autoreleasePool的数据结构 简单说是双向链表,每张链表头尾相接,有parent、child指针,每创建一个池子,会在首部创建一个哨兵对象作为标记,最外层池子的顶端会有一个next指针。当链表容量满了,就会在链表的顶端,并指向下一张表 说一下autoreleasePool的实现原理 autoreleasePool是一个延时release的机制,在自动释放池被销毁或耗 …

    继续阅读

  2. iOS 初探 AFNetworking

    本文不对AFNetworking作全面的解析,仅对比解析一下2.x和3.x的差异。 AFNetworking分为如下5个功能模块: 网络通信模块(AFURLSessionManager、AFHTTPSessionManger) 网络状态监听模块(Reachability) 网络通信安全策略模块(Security) 网络通信信息序列化/反序列化模块(Serialization) 对于iOS U …

    继续阅读

  3. iOS 正则匹配常用方法

    验证手机号 123456// 验证手机号+ (BOOL)isValidatePhone:(NSString *)phone{ NSString *phoneRegex = @"^1([358][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$"; NSPredicate …

    继续阅读

  4. iOS 内购项目的App Store推广

    iOS 11以后的用户可以在App Store内的下载页面内直接购买应用的内购商品,这项功能苹果称作做Promoting In-App Purchases,如果你的App需要在App Store推广自己的内购商品,则需要在App Store推广里上传推广用的图像,另外苹果也在iOS11 SDK里面新增了从App Store购买内购项目跳转到App的新方法 选择推广App内购买项目的好处 提高 …

    继续阅读

  5. iOS block原理详解

    block本质 block底层就是一个struct __main_block_impl_0类型的结构体,这个结构体中包含一个isa指针,本质上是一个OC对象 block是封装了函数调用以及函数调用环境的OC对象 block底层结构block底层结构就是__main_block_impl_0结构体,内部包含了impl结构体和Desc结构体以及外部需要访问的变量,block将需要执行的代码放 …

    继续阅读

  6. iOS 数据结构

    数组和链表的区别 数组地址连续,查找速度快,操作效率低存储单元在定义时分配,元素个数固定,内存空间要求高 链表地址不连续,查找速度慢,操作效率高存储单元在程序执行时动态申请,可按需动态增减 iOS内存分区的情况,五大区域 栈区Stack先进后出FILO由编译器自动分配和释放栈空间多线程不共享连续的内存地址,由高向低分配,不会产生碎片空间较小,运行速度较快,效率高栈是机器系统提供的数据 …

    继续阅读

  7. iOS Crash文件获取及符号化

    Crash文件获取 大致可以分为两种方式:远程获取和本地获取;具体可以分为如下四种途径 1.1. 远程获取;已经上传到iTunes Connect的应用,可以通过iTunes Connect的App分析查看App崩溃情况不会有崩溃日志,如果是TestFlight测试,则可以在iTunes Connect获取到崩溃日志 1.2. 远程获取;通过Xcode菜单Window -> Orga …

    继续阅读

  8. iOS 时间日期总结

    获取时间戳 单位秒,保留六位有效数字,格式如:1574068247.54510312NSDate *datenow = [NSDate date];NSString *timeSp = [NSString stringWithFormat:@"%f", (double)[datenow timeIntervalSince1970]]; 单位秒,整数, …

    继续阅读

  9. iOS 如何优化 App 的启动耗时

    iOS 的 App 启动时长大概可以这样计算: t(App 总启动时间) = t1(main 调用之前的加载时间) + t2(main 调用之后的加载时间) t1 = 系统 dylib(动态链接库)和自身 App 可执行文件的加载 t2 = main方法执行之后到AppDelegate类中的application:didFinishLaunchingWithOptions:方法执行结束前这段时间, …

    继续阅读

  10. iOS RunLoop

    RunLoop概念 RunLoop是通过内部维护的事件循环(Event Loop)来对事件/消息进行管理的一个对象 没有消息处理时,休眠以避免资源占用;有消息需要处理时,立刻被唤醒 为什么main函数不会退出12345int main(int argc, char * argv[]) { @autoreleasepool { return UIAppli …

    继续阅读