![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
iOS
文章平均质量分 70
FreeBSFree
花有百样红,人与人不相同
展开
-
对象 类对象 元类对象
对象 类对象 元类对象的isa指针指向类对象类对象的isa指针指向元类类对象和元类其他都是对象,是编译器为我们创建的。对象初始化先根据类对象初始化内存大小。初始化对象isa指针即可。方法的调用对象方法的调用。实际上根据对象isa去类对象去查找对象方法去调用。找不到就去类对象的superCls指针去父类对象去查找,再找不到就进行消息转发。没有实现消息转发那就会崩溃。类方法的调用。实际上我们代码用的类就是类对象。根据类对象isa指针去元类对象查找方法去调用,也会查找父类的元类对象。过原创 2020-05-29 16:00:32 · 238 阅读 · 0 评论 -
引用计数与弱引用
简书:https://www.jianshu.com/p/ef6d9bf8fe59gitHub:https://github.com/Draveness/Analyze/blob/master/contents/objc/黑箱中的%20retain%20和%20release.md原创 2020-05-09 16:56:05 · 302 阅读 · 0 评论 -
链式编程
### 背景最近涉及到画折线图业务,由于以前工程代码用的是AAChartKitLib三方,这次app迭代涉及到修改折线图样式,所以自己看了下这个三方源代码。发现使用时候用的是链式属性赋值,自己研究了下。### 原理```self.aaChartModel= AAChartModel.new.chartTypeSet(AAChartTypeLine)//图表类型.titleSet(@...原创 2020-04-28 16:18:17 · 288 阅读 · 0 评论 -
UITextView自适应高度
currentLineNum = 1;//默认文本框显示一行文字NSDictionary *dict=@{NSFontAttributeName:[UIFont systemFontOfSize:14.0]};CGSize contentSize=[@"我" sizeWithAttributes:dict];heightText = contentSize.height;self.tex...原创 2019-12-20 14:38:50 · 534 阅读 · 0 评论 -
从MVC到MVP
前言以前本人一直用的都是MVC的设计模式去开发应用的。封装MVC的基类等等,和一些工具类配合开发。甚至去过的公司也都是这种方式,就连苹果的基类名字都是以View,Controller(UIView,UIViewController等)结尾的。那是不是iOS开发只能用MVC的设计模式呢,显然不是的。MVC,MVP,MVVM(统称MVX系列)其实都可以的。其实android现在普遍在用MVP的设计...原创 2019-05-06 11:31:53 · 185 阅读 · 0 评论 -
从MVP到MVVM
前言通过上篇文章,我们了解到利用mvp可以对mvc的c层瘦身,并使得层次分明,且网络请求变得通用。那就已经很完美了,那么mvvm是用来干嘛的呢。对于mvvm它是用来描述数据和视图的关系的。我们开发过程中常常发现数据变化会导致视图的变化,如一个列表,当没有数据的时候要展示空界面,当有数据的时候要展示对应条数的列表界面。在比如当网络请求回来的列表中的一个为已点赞数据,那么界面的相应视图就要显示红心...原创 2019-05-06 18:03:09 · 181 阅读 · 0 评论 -
masonry更新xib约束探索
一个有趣的实验首先做个简单的小实验,在storyboard拖放一个view,添加好约束。之后利用masonry分别去更新这个视图的位置,尺寸。会发现不一样的结果。//更新尺寸- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ [super touchesBegan:tou...原创 2019-05-07 17:16:11 · 1161 阅读 · 0 评论 -
控制台输出约束警报,界面完好
现象发现在使用UITableView控件时候,self.tableView.tableHeaderView = self.viewHeader;控制台打印大量的约束冲突,但是界面完好。解决办法UIView *viewTemp = [[UIView alloc] initWithFrame:CGRectMake(0, 0, ScreenWidth, heightUse)];[viewTem...原创 2019-05-20 17:34:37 · 403 阅读 · 0 评论 -
利用SDWebImage将imageStr数组转成image数组
代码//封装+ (void)fetchCacheImgs:(NSArray *)arrImgStr finishBlk:(void(^)(NSArray *arrImgs))finishBlk{ NSMutableArray *arrMTemp = [NSMutableArray arrayWithArray:arrImgStr]; __block NSInteger sum ...原创 2019-05-18 10:02:27 · 212 阅读 · 0 评论 -
约束冲突问题总结
如何避免产生约束问题1. 不要试图用masonry去更新xib的约束原因:masonry内部会判断如果是系统的约束就不处理,反而添加了新的约束,这样必然会出现约束冲突问题。2. tableHeaderView约束优先级要降低原因:我们要创建一个view让tableHeaderView=view,并在view上添加子的我们需要的那个整体view。然后约束时候要降低优先级。这样当tableHe...原创 2019-05-31 13:57:55 · 1452 阅读 · 0 评论 -
RunLoop的唤醒探索
概况屏幕触摸事件,定时器事件是常见的可以唤醒runLoop的事件。但是我们很少去关注定时器是怎么唤醒额runLoop,唤醒后又进行了哪些操作。我们也很少关注我们触摸屏幕如点击一个按钮,是如何唤醒的runLoopo,唤醒多经历了哪些过程,点击完按钮又执行了什么。下边让我们来逐一探索。定时器事件唤醒runLoop首先我们先写个类去监听runLoop的状态@implementation Ma...原创 2019-02-13 17:29:27 · 453 阅读 · 0 评论 -
runtime(消息转发)
概况当一个方法沿着类的继承链找不到实现时候,runtime会启动消息转发。消息转发一共有三步。消息转发三步resolveInstanceMethod#import "Cat.h"#import <objc/runtime.h>@implementation Cat+ (BOOL)resolveInstanceMethod:(SEL)sel{ if ([NSS...原创 2019-02-12 15:49:38 · 176 阅读 · 0 评论 -
KVC原理
setValue:forKey:,setValue:forKeyPath: Student *aStudent = [[Student alloc] init]; [aStudent setValue:@&quot;123&quot; forKey:@&quot;ivar&quot;]; [aStudent setValue:[[Test alloc] init] forKey:@&quot原创 2019-02-12 13:51:27 · 349 阅读 · 0 评论 -
block
当block访问静态全局变量或者全局变量时候是ok的因为:block的实质是函数,函数是可以直接访问全局变量或者静态全局变量的,这时候block存储在数据区。当block什么都不访问时候,这时候该block也是存储在数据区。当block访问自动变量时候block内部只是简单的使用了外部自动变量不涉及赋值。(这块其实oc内存管理这本书讲解的是有问题的,它没考虑到arc和m...原创 2018-10-21 18:51:56 · 140 阅读 · 0 评论 -
JS与OC交互
UIWebView拦截URL原理:js通过加载url方式被webView拦截,这时候看如果是自己定义的scheme请求就不让webView继续加载请求,否则就继续加载请求。webView看加载的请求的host是哪种host进行分别处理。处理oc代码。之后调用stringByEvaluatingJavaScriptFromString调用js代码。注意:js调用oc属于异...原创 2018-10-21 18:57:43 · 2862 阅读 · 0 评论 -
多线程-GCD
概念相关从iOS4引入了GCD技术。它是多线程技术之一。和NSThread,performSelector一样可以实现多线程。NSThread,performSelector,GCD他们三者的区别是什么从书写角度考虑。GCD书写简单易懂。其他两个书写繁琐。GCD是c的api执行速度更快。GCD可以很好的利用cpu核心数等硬件资源,也可以很好的利用系统的任务调度等软件资源合理的实现多线...原创 2018-10-21 19:02:26 · 375 阅读 · 0 评论 -
多线程-NSOperationQueue
NSOperationQueue与GCD对比GCD是c的API执行效率更高。NSOperationQueue可以设置最大并发数,优先级,依赖关系来调整任务执行顺序。NSOperationQueue是OC的对象,可以进行KVO监听是否是在执行是否已经完成,或者取消。NSOperationQueue可以取消,挂起,恢复还没有进行的操作。如果GCD能解决问题,我们尽量用GCD。如果GCD...原创 2018-10-21 19:03:20 · 186 阅读 · 0 评论 -
动画
coreAnimation基本动画 //1. 中心点平移动画 CABasicAnimation *animation = [CABasicAnimation animation]; animation.keyPath = @"position.x"; animation.fromValue = @50; animation.toValue = @(375-50)...原创 2018-11-04 21:02:12 · 113 阅读 · 0 评论 -
RAC简单使用
简介RAC-ReactiveCocoa 响应式编程,它可以用来代替系统的一些事件(点击,通知kvo,定时器等等)。用它可以更方便的处理系统事件。往往MVVM中用它处理kvo。其实mvc或者mvp或者mvvm等都可以用rac来处理事件,只不过mvvm用rac来代替kvo更方便而已。示例代码- (void)viewDidLoad { [super viewDidLoad]; ...原创 2018-12-06 20:52:40 · 288 阅读 · 0 评论 -
OC对象内存管理
NSObject *a = [[NSObject alloc] init];这时候在堆中分配一块内存,并在栈中创建变量a指针,并将在堆中分配的内存起始地址赋值给这个指针a;这样栈中的指针a就指向了堆中的对象。通过a可以访问堆中对象。ios对象在ARC下是编译器做内存管理,在适当的地方插入relase代码,当自动引用计数减1。(编码问题会导致无法内存释放,造成内存泄露)当自动引用计数减到0时候...原创 2018-12-06 20:57:15 · 139 阅读 · 0 评论 -
iOS中常用的几种锁
自旋锁NSSpinLock ,它现在被废弃了,不能使用了,它是有缺陷的,会造成死锁。当低优先级线程访问了锁并执行了任务,这时恰好高的优先级线程也访问了锁,因为它的优先级较高,所以要优先执行任务,所以它会不停的访问该锁,并使得cpu大部分都用来访问该锁忙等了,造成低优先级的线程没有足够的cpu时机来执行任务,这样造成了死锁。互斥锁p_thread_mutex,NSLock,@synthron...原创 2019-01-11 17:27:51 · 1566 阅读 · 0 评论 -
KVO探索
KVO概括大家都知道kvo是一种设计模式,是一种键值观察,当属性的值改变时候会触发回调,获取该属性的旧值和新值。但是可能有些朋友不清楚什么时候用它,使用场景是什么。当需要监听一个属性的值改变时候我们可以用到它。比如:当图片的url改变时候自动加载新的图片。当scrollView的offset改变时得到回调获取offset的值,这时候不用delegate较好,特别是封装一个框架时候,如果用d...原创 2019-01-29 15:11:06 · 108 阅读 · 0 评论 -
RunLoop
CF-1151.16文件源码地址:http://opensource.apple.com/tarballs/CF/CF-1151.16文件RunLoop解释: https://www.cnblogs.com/chengsh/p/8629605.htmlRunLoop概念runloop作用runLoop的存在解决了cpu空转的问题,它是不停的检测是否有事件触发,如果有就唤醒cpu进行处理事...原创 2018-10-21 18:31:36 · 237 阅读 · 0 评论