随着业务的不断迭代和功能的逐渐增多,或是业务的需要,APP 在体量上来之后或多或少都会遇见性能问题。
笔者所在的直播技术团队就遇见了在很大的直播间里,有着持续的大量的广播发送到客户端,而大量的广播会造成 UI 的更新或者动画的展示造成的性能问题。本篇博客就主要记录了我对所遇到的性能问题的思考和解决办法。
随着业务的不断迭代和功能的逐渐增多,或是业务的需要,APP 在体量上来之后或多或少都会遇见性能问题。
笔者所在的直播技术团队就遇见了在很大的直播间里,有着持续的大量的广播发送到客户端,而大量的广播会造成 UI 的更新或者动画的展示造成的性能问题。本篇博客就主要记录了我对所遇到的性能问题的思考和解决办法。
iOS Hybrid 相关大致上有以下几块内容:
对应一个 iOS 项目而言,我们平时都是直接双击 xcodeproj
文件,打开项目进行代码编写,点击运行之后可以编译运行 APP,却很少思考这个文件的本质上是什么?有哪些部分组成,做用都是什么,这篇文章简单介绍下项目文件的组成。
iOS Crash文件的解析需要三个文件:
事情的起因是这样的,每周都要发送工作周报,标题是需要的固定的格式(方便规则收信),比如 【工作周报】 xxx 11.20-11.24,发送和抄送也是给固定的人,企业邮箱还没有模板,所以每次发邮件都要复制粘贴标题、发送人和抄送人,只有内容是手写,便萌发了用脚本发送邮件的想法。
查看下 @autoreleasepool
的 cpp 代码实现:
1 | /* @autoreleasepool */ { __AtAutoreleasePool __autoreleasepool; |
查看 __AtAutoreleasePool
的结构,发现是一个结构体,在构造方法中调用了 objc_autoreleasePoolPush()
,并在析构中调用了 objc_autoreleasePoolPop()
。
weak 修饰的变量,不会增加所引用对象的引用计数,且会在该对象析构后自动将指向置为nil。其本质是初始化和赋值操作会被编译器改写为 objc_initWeak
或者 objc_storeWeak
函数调用。objc_initWeak
的逻辑只是比 objc_storeWeak
多了所赋值对象的判空,接下来会直接调用 storeWeak(id *location, objc_object *newObj)
函数。
@synchronized
可以保证多线程不会同时执行一段代码,做用类似于锁,但比直接使用锁更加方便直观,那么它究竟是如何实现的呢?
Objc 中的 Block 其实是一个对象,之前也说过 Objc 中对象的结构
来看下 Block 的实现,新建 TooT.m
文件写一个 func_TooT
函数:
版本:AFNetworking 3.1.0
AFNetworking 主要的几个类或协议:
AFURLSessionManager
AFHTTPSessionManager
AFNetworkReachabilityManager
AFSecurityPolicy
<AFURLRequestSerialization>
<AFURLResponseSerialization>