
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
在开始进行应用程序性能分析的时候,一定要使用真机,模拟器运行在Mac上,然而Mac上的CPU往往比iOS设备要快。相反,Mac上的GPU和iOS设备的完全不一样,模拟器不得已要在软件层面(CPU)模拟设备的GPU,这意味着GPU相关的操作在模拟器上运行的更慢,尤其是使用CAEAGLLayer来写一些OpenGL的代码时候. 这就导致模拟器性能数据和用户真机使用性能数据相去甚运.另外在开始性能分..
当App发生crash时, attached的debugger会暂停App的运行,并定位的crash位置。详细看一下crash栈,这里是App启动入口这里是crash的具体位置发生crash时,debugger会收到signal,然后暂停App的运行,显示crash的调用栈如果当前没有attached的debugger,系统会吧crash堆栈信息dump到一个log文件中release版本的app

在这里可以看到幻灯片你可能在阅读这篇文章之前已经问过自己一些问题,比如说:谁应该拥有联网请求:Model还是Controller, 或者viewModel, presenter?谁该处理数据(包括服务器数据,本地数据),谁该处理展示逻辑?针对这些问题的不同回答就产生了不同的架构.为什么要纠结选择什么架构呢?假如有一天,你在调试一个实现了几十种功能的庞大的类时,你会发现自己很难找到并修复你的类中的任
iOS的应用一般情况下,无非就是用户与界面间交互,形成操作指令,然后对数据进行增删改查, 发起网络请求。当业务过于复杂时,我们就可以采用分层架构设计。这样可以最大程度上解耦,这里,我们主要介绍最经典的三层架构设计模型。大体上,分别为:应用层、服务层、数据层。也有分4层的,把数据层在拆分为数据持久层和信息系统层.Tips: 我们常用的MVC、MVP、MVVM等都是属于应用层内的架构,也就是说,它们主
无可厚非,读优秀的源码是提高自己快捷而有效的方式;如何读到优秀的源码?直白点说找github星星最多的项目。虽说有很多项目存在刷star的嫌疑,但是,github上面上万star的项目也不是刷星就能刷出来的。其次,上万star的项目也很多,能都全部读懂并深入理解也已经很厉害了吧。最后说明:文章是对自己解读源码的一些记录。缘由英文比较渣有c/c++语言功底不能浪费项目中引入三方库,出
bool 1字节char 1字节int 4字节float 4字节double 8字节一. 基本原则1. struct中成员变量的声明顺序,与成员变量对应的内存顺序是一致的;2. struct本身的起始存储地址必须是成员变量中最长的数据类型的整倍数,注意是最长的数据类型,而不是最长的变量3. 内存对齐与编译器设置有关。二. 计算规则(以下的所有规则,必须同时满足,并不是满...
MetricKit 是苹果 iOS13 推出的框架,他会在一天结束后,将过去 24 小时内收集的性能数据归集在一起,并在下一次 App 启动时,通过 delegate 方法回调给我们。@protocolMXMetricManagerSubscriber<NSObject>-(void)didReceiveMetricPayloads:(NSArray<MXMetricPayloa
属性包装器,用来修饰属性,它可以抽取关于属性重复的逻辑来达到简化代码的目的。比如:如果你有属性提供了线程安全检查或将数据存到数据库功能,那么你将需要为每个属性编写类似代码。有了属性包装器,我们就可以避免类似重复代码。个人理解:属性包装器是对 set、get方法的封装,不同的属性有相似的set、get,使用属性包装器可以简化相似的代码。
如果你已经使用 Objective-C 编写过任何并发程序,那么想必是见过@synchronized这货了。@synchronized结构所做的事情跟锁(NSLock, 更准确的说法应该是NSRecursiveLock)类似:它可以防止不同的线程同时执行同一段代码。但在某些情况下,相比于使用NSLock创建锁对象、加锁和解锁来说,@synchronized用着更方便,可读性更高。下面是SDWebI
TCP/IP 协议簇建立了互联网中通信协议的概念模型,该协议簇中的两个主要协议就是 TCP 和 IP 协议。TCP/ IP 协议簇中的 TCP 协议能够保证数据段(Segment)的可靠性和顺序,有了可靠的传输层协议之后,应用层协议就可以直接使用 TCP 协议传输数据,不在需要关心数据段的丢失和重复问题。图 1 - TCP 协议与应用层协议IP 协议解决了数据包(Packet)的路由和传输,上层的







