自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 weak、dealloc内部实现

weak经过编译会调用以下两方法,objc_initWeakstoreWeakweak_register_no_lock在内部先通过操作后(如判空、deallocating、isTaggedPointer),调用weak_entry_for_referent获取 weak_entry_t (内部通过哈希查找&散列表的mask得到index,从弱引用表entiries[index...

2019-03-06 11:11:16 151

原创 Category、load、initialize、Class、关联对象、isa

Category的实现原理Category编译之后的底层结构是struct category_t,里面存储着分类的对象方法、类方法、属性、协议信息。在程序运行的时候,runtime会将Category的数据,合并到类信息中(类对象、元类对象中)Category和Class Extension的区别是什么?Class Extension在编译的时候,它的数据就已经包含在类信息中Categor...

2018-09-30 12:01:50 297

原创 iOS调试技巧(二)

Xcode 断点调试时使用格式x是16进制,f是浮点,d是10进制字节大小b:byte 1字节,h:half word 2字节w:word 4字节,g:giant word 8字节如这样一段代码 NSInteger flag = 1; NSLog(@"falg:%zd",flag);被断点卡住后,可进行如下调试po flag 打印 f

2018-09-29 18:50:28 186

原创 iOS 性能优化 (二)

主要介绍图片加载优化绘图实际消耗的时间通常并不是影响性能的因素。图片消耗很大一部分内存,而且不太可能把需要显示的图片都保留在内存中,所以需要在应用运行的时候周期性地加载和卸载图片。图片文件加载的速度被CPU和IO(输入/输出)同时影响。iOS设备中的闪存已经比传统硬盘快很多了,但仍然比RAM慢将近200倍左右,这就需要很小心地管理加载,来避免延迟。只要有可能,试着在程序生命周期不易察觉的时候...

2018-09-20 15:12:43 184

原创 组件化开发

公司新需求“打卡瓜分奖池”,公司工程又很复杂,功能模块比较多,之前业开发过定数组件、购物车组件等,这次综合组件化开发的优缺点后,再次打算将此需求当做小模块,实行组件化开发。公司工程实现路由解耦,简单介绍一下:字符串NSString *const WishListControllerURL = @"code://WishListController";NSString *const Writ...

2018-09-19 11:56:31 221

原创 订单支付流程

购物车订单处理流程根据上图订单页面进行分析如何安全下订单进入购物车页面,点选商品(书籍)时,将商品(书籍)productId 通过API传给后端,然后返回书籍价格显示给用户,如图1.点击结算按钮,将勾选的商品(书籍)productId包装成数组,传入API给后端,该API是复合接口,包括礼券是否可以使用、详细介绍等。后端API返回订单详情,并有签名加密的订单token,本地存储并将订...

2018-09-18 12:52:07 4714

原创 iOS 性能优化(一)

提前布局提前布局可以说是最重要的优化点了。其实在从服务端拿到 JSON 数据的时候,关于视图的布局就已经确定了,包括每个控件的frame、cell的高度以及文本排版结果等等,在这个时候完全可以在后台线程计算并封装为对应的布局对象XXXTableViewCellLayout,每个cellLayout的内存占用并不是很多,所以直接全部缓存到内存中。当列表滚动到某个cell的时候,直接拿到对应的cellLayout配置这个cell的对应属性即可。当然,该有的计算是免不了的,只是提前算好并缓存,免去了在滚动的时

2018-09-17 20:05:19 1396

原创 iOS 数据埋点

数据埋点以下是数据埋点的基础类型,供各位参考,初始化简单,内部发送url也写好,因工作需要暂时写了基础类型。个人建议使用“钩子”去做,维护单一plist即可,耦合度降低很多,有时间会继续更新。DDYAnalyse SDK简单易用的埋点SDK 初始化项目,在AppDelegate.m内 - (BOOL)application:(UIApplication )application d...

2018-04-12 18:00:53 469

原创 Block

block相关,先运行下面代码,可注释相关行,查看打印结果 记住iOS内用引用计数管理内存,记住引用计数为0,释放对象内存,非0就释放不了。使用alloc new copy mutableCopy创建的对象,引用计数+1,release时,引用计数-1,记住这些话,万变不离其宗。详情请移步其他博客。 - (void)viewDidLoad { [super viewDidLoad];

2017-06-03 18:30:04 271

原创 iOS程序生命周期,苹果内购、微信支付、支付宝支付

开发4年了,很少写博客,主要是懒,哈哈。遇到不清晰的就翻翻以前的代码。有时还找不到,现在发现博客可以更方便查找知识点,所以用博客做笔记吧。也有助于大家学习、交流,先写一些基础的吧。一、生命周期程序启动时,加载xib、storyboard、plist等各种资源配置; 各个控制器的load方法+(void)load{ NSLog(@"11--%s",__func__);},然后才去运行

2017-05-05 18:44:16 1787

原创 图文混排

github 的demon如下:https://github.com/CoderMaDongJun/RichText

2017-04-01 16:52:34 333

原创 iOS定时器三种初始化方式

定时器问题研究很多次,一直忘记写博客,今天把以前研究的心得与大家分享,不足之处,请指点!#pragma mark -定时器//方式1:- (void)createTimer1{ //方式1: dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER,...

2017-03-16 14:30:52 601

原创 iOS 调试技巧(一)

很多人给工程调试时,每个界面都写dealloc,能达到效果,未免有些麻烦。下面介绍一个小小实例:控制器写个分类,用runtime方法交换。一、控制器、View分类1.新建分类#import "UIViewController+XYController.h" 2.m引入头文件  #import <objc/runtime.h>   3.实现...

2017-03-16 14:25:38 477

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除