一个完整的app需要的能力和一些通用的解决方案(三方库)。
主流的app都将不同业务(增长、交易、短视频、直播、社区等等不同业务)做成独立的组件,以及支持app运行的基础代码都封装成独立的模块,不仅能提高编译速度,也解除了各个业务的耦合,下面是组件化app的各种基础库。
各个组件之间啊采用何种方式通信的中间件
比如url-block方式,蘑菇街的方案
核心在于这种硬编码
#include
#include
@implementation Person
- (instancetype)init
{
self = [super init];
if (self) {
[self readDataFromMachO];
}
return self;
}
- (void)readDataFromMachO {
//1.根据符号找到所在的mach-o文件信息
Dl_info info;
dladdr((__bridge void *)[self class], &info);
//2.读取__DATA中自定义的ProtocolInfoDataz数据
#ifndef __LP64__
const struct mach_header *mhp = (struct mach_header*)info.dli_fbase;
unsigned long schemeSize = 0;
uint32_t *schemeMemory = (uint32_t*)getsectiondata(mhp, "__DATA", "ProtocolInfoData", &schemeSize);
#else /* defined(__LP64__) */
const struct mach_header_64 *mhp = (struct mach_header_64*)info.dli_fbase;
unsigned long schemeSize = 0;
uint64_t *schemeMemory = (uint64_t*)getsectiondata(mhp, "__DATA", "ProtocolInfoData", &schemeSize);
#endif /* defined(__LP64__) */
//3.遍历ProtocolInfoData中的协议数据
unsigned long schemeCounter = schemeSize/sizeof(struct ProtocolInfo);
struct ProtocolInfo *items = (struct ProtocolInfo*)schemeMemory;
for(int idx = 0; idx < schemeCounter; ++idx){
NSString * key = [NSString stringWithUTF8String:items[idx].key];
NSString * value = [NSString stringWithUTF8String:items[idx].value];;
NSLog(@"-----key:%@ , value:%@",key,value);
}
}
@end
@interface Person (myTest)
@end
@implementation Person (myTest)
- (void)loads {
ProtocolRegister(Person, SwitchValueDelegate);
}
@end
还有protocol-class和target-action。
target-action代表的库是CTMediator
组件通信承担了大部分的页面跳转
负责启动任务的规划,包括负责网络库、埋点、crash收集、图片库等启动任务规划
生命周期管理从main函数进入的appdelegate写了各种生命周期的代码。
负责app生命周期相关的事件分发,didfinish等方法
第一部分的组件通信里,CTMediator更适合处理一个组件暴露的服务调度的问题,蘑菇街的url-controller比较适合页面跳转。
UI骨架对UIKit的再封装。定制导航栏(栈)、定制一些基础的按钮
加载占位图。
AFNetworking
一般会进行再分装,采用多实例方式去进行网络请求。
负责管理app内的长链接和退到后台的苹果apns长链接。
app内外的服务端推送
SDWebImage
一般会再封装,进行图片链接的替换(CDN),缓存逻辑补充(首页图片缓存、常见gif图)
用户行为分析
web容器app的动态能力
启动闪屏广告页
远端配置下发一些用于灰度测试一些app能力的开关。
#3 高可用
性能度量、crash收集
safeString等安全容器封装
安全气垫相关文章:【网易iOS App运行时crash自动防护】
安全气垫对常见的 Crash 点,做了防护,且可以:
● 可通过 Orange 配置开启对应防护,包括:
○ 野指针防护
○ "unrecognized selector"相关防护
○ 容器类防护
○ NSNotificationCenter防护
○ performSelector防护
○ NSString,NSAttributedString防护
○ NSTimer内存泄露防护
○ KVO
○ NanoFree
○ WebView中MPVolumeView的Crash问题
封装GCD。
优秀博客个人 王巍@Line https://onevcat.com/
个人 YY@滴滴 http://blog.ibireme.com/
个人 sunnxx@滴滴 http://blog.sunnyxx.com/
个人 砰@微信 http://blog.cnbang.net/
个人 卓同学@丁香园 http://www.jianshu.com/u/88a056103c02
个人 南峰子@京东 http://southpeak.github.io/
个人 唐巧@猿题库 http://blog.devtang.com/
个人 杨骑滔@锤子 http://kittenyang.com/
个人 迅捷 http://www.jianshu.com/u/3e55748920d2
个人 拖沓 http://draveness.me/
个人 杨萧玉@QQ http://yulingtianxia.com/
个人 Limboy@蘑菇街 http://limboy.me/
个人 田巍宇 https://casatwy.com/
个人 叶孤城 http://www.jianshu.com/u/b82d2721ba07
团队 布格利 http://chuansong.me/account/weixinBugly
团队 微信阅读 http://wereadteam.github.io/
团队 京东XcodeMen http://www.jianshu.com/u/d509cc369c78
团队 美团 http://tech.meituan.com/tag/iOS
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)