-
适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr屏幕尺寸及安全区域
先来认识px与pt区别px就是表示pixel像素,是屏幕上显示数据的最基本的点,它不是自然界的长度单位,点的大小是会变的,也称为相对长度;pt就是point,是印刷行业常用单位磅,等于1/72英寸,所以它是一个自然界标准的长度单位,也称为绝对长度。 我们再来了解缩放因子(scale factor between logic point and device pixel)早期的iPhone3GS …
-
iOS 初探 AFNetworking
本文不对AFNetworking作全面的解析,仅对比解析一下2.x和3.x的差异。 AFNetworking分为如下5个功能模块: 网络通信模块(AFURLSessionManager、AFHTTPSessionManger) 网络状态监听模块(Reachability) 网络通信安全策略模块(Security) 网络通信信息序列化/反序列化模块(Serialization) 对于iOS U …
-
iOS 正则匹配常用方法
验证手机号123456// 验证手机号+ (BOOL)isValidatePhone:(NSString *)phone{ NSString *phoneRegex = @"^1([358][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$"; NSPredicate * …
-
iOS 内购项目的App Store推广
iOS 11以后的用户可以在App Store内的下载页面内直接购买应用的内购商品,这项功能苹果称作做Promoting In-App Purchases,如果你的App需要在App Store推广自己的内购商品,则需要在App Store推广里上传推广用的图像,另外苹果也在iOS11 SDK里面新增了从App Store购买内购项目跳转到App的新方法 选择推广App内购买项目的好处 提高 …
-
iOS block原理详解
block本质 block底层就是一个struct __main_block_impl_0类型的结构体,这个结构体中包含一个isa指针,本质上是一个OC对象 block是封装了函数调用以及函数调用环境的OC对象 block底层结构block底层结构就是__main_block_impl_0结构体,内部包含了impl结构体和Desc结构体以及外部需要访问的变量,block将需要执行的代码放 …
-
iOS 数据结构
数组和链表的区别 数组地址连续,查找速度快,操作效率低存储单元在定义时分配,元素个数固定,内存空间要求高 链表地址不连续,查找速度慢,操作效率高存储单元在程序执行时动态申请,可按需动态增减 iOS内存分区的情况,五大区域 栈区Stack先进后出FILO由编译器自动分配和释放栈空间多线程不共享连续的内存地址,由高向低分配,不会产生碎片空间较小,运行速度较快,效率高栈是机器系统提供的数据 …
-
iOS Crash文件获取及符号化
Crash文件获取 大致可以分为两种方式:远程获取和本地获取;具体可以分为如下四种途径 1.1. 远程获取;已经上传到iTunes Connect的应用,可以通过iTunes Connect的App分析查看App崩溃情况不会有崩溃日志,如果是TestFlight测试,则可以在iTunes Connect获取到崩溃日志 1.2. 远程获取;通过Xcode菜单Window -> Orga …
-
iOS 时间日期总结
获取时间戳 单位秒,保留六位有效数字,格式如:1574068247.54510312NSDate *datenow = [NSDate date];NSString *timeSp = [NSString stringWithFormat:@"%f", (double)[datenow timeIntervalSince1970]]; 单位秒,整数, …
-
iOS 如何优化 App 的启动耗时
iOS 的 App 启动时长大概可以这样计算: t(App 总启动时间) = t1(main 调用之前的加载时间) + t2(main 调用之后的加载时间) t1 = 系统 dylib(动态链接库)和自身 App 可执行文件的加载 t2 = main方法执行之后到AppDelegate类中的application:didFinishLaunchingWithOptions:方法执行结束前这段时间, …
-
iOS RunLoop
RunLoop概念 RunLoop是通过内部维护的事件循环(Event Loop)来对事件/消息进行管理的一个对象 没有消息处理时,休眠以避免资源占用;有消息需要处理时,立刻被唤醒 为什么main函数不会退出12345int main(int argc, char * argv[]) { @autoreleasepool { return UIAppli …