Objective C底层研究
文章平均质量分 75
autorelease, runtime, runloop, block, GCD...
群野
cording
展开
-
iOS测试,奔溃分析及优化
目录1、重要性、注意点2、逻辑测试、单元测试3、性能测试、异步测试流量监控功能性能测试异步测试压力测试4、UI测试5、Crash分析Device Logs对Crash的代码拦截内存奔溃分析1、重要性、注意点通常小项目不会做单元测试,但是如果你会的话,就是锦上添花的事了。对于大公司的迭代产品主要功能类,及核心模块开发,通常是有自己的测试团队的,但是如果你每次提交代码都是没有一些很low的bug,无疑能让你信服你的能力。对于会单元测试的编程人员,通常基于接口编程,测试驱动代码,代码也会比较规范。不会的原创 2021-11-20 15:15:40 · 1844 阅读 · 0 评论 -
Objective-C runtime 探究
什么是runtime? OC是运行时语言,OC提供了底层的一套C语言api,编译器最终都会讲OC代码转化为运行时代码。通过终端命令:clang -rewrite-objc .m可以看到便于后的.cpp(c++文件)。 调用方法本质就是利用runtime提供的objc_msgSend()发消息。runtime能做什么? 可以做一些OC不容易实现的功能,比如: a\动态交换两个方法的实现(特别是原创 2016-05-22 23:39:09 · 357 阅读 · 0 评论 -
iOS Runloop探究及应用
Runloop剖析Runloop初识Runloop是什么Runloop有什么用Runloop怎么用Runloop与线程CFRunloopNSRunloopRunloop相关类Runloop内部执行过程Runloop应用总结Runloop初识Runloop是什么程序运行过程中循环的处理事情,是个do{…}while()循环。Runloop有什么用保持程序的持续执行。处理App中的各种事件(触摸、定时器、performSelector()、线程切换处理等)节省CPU资源、提高程序性能:该做事的原创 2021-01-28 00:04:28 · 890 阅读 · 1 评论 -
iOS App性能优化
循环引用Block循环引用通过终端命令:clang -rewrite-objc .m可以看到便于后的.cpp(c++文件)。可以看的block结构体捕获外部变量直接做为成员变量,如果是weak变量很可能还未使用,就被释放,所以通常用一个block里的strong变量指向外面的weak变量,这样保证代码块执行时,捕获的变量未被释放。NSTimer循环引用+ (NSTimer *)sched...原创 2019-02-22 02:32:02 · 501 阅读 · 0 评论 -
GCD实现异步线程的等待实行
GCD实现线程1,2并行和3串行和4,5串行,4,5是并行。3延时3秒执行。分析线程时注意⚠️:线程任务通常需要时间,为了便于模拟任务分析通常用sleep(second)函数,代替任务。题意分析:即3依赖,1,2并行执行完毕;等待3执行完毕,窜行执行4,5;1,2并行对列,异步执行(可以是全局队列);3,4窜行队列,异步执行(可以是主队列)。使用dispatch_group_notify-...原创 2019-01-22 23:23:48 · 688 阅读 · 0 评论 -
沙盒中的文件目录结构及用途
Documents保存用户创建的文档文件的目录,用户可以通过文件分享分享该目录下的文件。保存应用运行时生成的需要持久化的数据,如游戏进度、涂鸦软件的绘图等信息,在iTunes和iCloud备份时会备份该目录。建议保存你希望用户看得见的文件。Library苹果不建议在该目录下保存任何用户相关数据,而是保存APP运行需要的修改数据,当然用户可以根据自己的实际需要进行保存。包含四个文件夹:Cache建议保存数据缓存使用。在用户的磁盘空间已经使用完毕时有可能删除该目录下的文件,在APP使用期间不会删除,A原创 2022-05-31 11:36:12 · 504 阅读 · 0 评论 -
『ios』atomic真的是线程安全吗?
什么是线程安全呢?线程安全:多线程操作共享数据不会出现想不到的结果就是线程安全的,否则,是线程不安全的。那么最后来总结下nonatomic肯定不是线程安全的atomic修饰后,我们为这个对象加了自旋锁, 不会出现多线程同时修改这个值的。至于这个值最终是什么,无法确定,是因为你不知道多线程的调用 顺序,也就无法判断最终的值是什么。 Atomic不能保证对象多线程的安全,它只是能保证你访问的时候给你返回一个完好无损的Value而已。atomic:系统生成的 getter/setter 会保 证 get、原创 2022-05-22 22:07:11 · 1125 阅读 · 0 评论 -
oc语言的优缺点有哪些
OC语言优点:1.Category是非常实用的扩展机制,可以很方便的为一个已有的类添加属性或者方法,而不需要笨拙的去继承。2.运行时多态的概念,可以让一个类的对象动态的以其他类行为去执行(OC中多了很多运行时态的机制,其中id的特殊用途,可以通过id类型的变量,调用不同类的同名函数,即使这些类没有任何关系)。3.ARC不用多讲了吧4.OC中类没有所谓的构造函数和析构函数,所以如果一个类中有其他类的数据(动态申请的),那么释放内存就不能依赖析构函数,但可以采用重写-(id) free来实现类中所有数转载 2022-04-25 14:32:03 · 803 阅读 · 0 评论 -
NSAutoreleasePool与内存管理
大数据处理,如高清图片的加载等,在加载过程中往往需要对加载过程中创建的内存对象进行回收利用:NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];NSMutableArray *mArray = [[NSMutableArray alloc] init];for (int index = 0; index < 10000; index++) { //栈内存,函数结束时释放(此时retainCount==-1) NS原创 2022-04-12 00:35:13 · 157 阅读 · 0 评论 -
iOS Objective-C 面试整理
面试的好处如同考试,获得肯定或者知道不足。对于ios,object编程的一些面试题做一些整理,如下:1、notification是多线程的吗?通知是监听者模式在ios编程里的应用,ios 的通知机制,包括通知发布,通知监听,通知移除。通知的发布看书简单的接口调用,其实是cocoa为用户做了监听者模式的封装,我们运行时没有发现其阻塞我们的操作,发布通知时后台另启线程,接收时回调到主线程进行处理。2、在项目什么时候选择使用GCD,什么时候选择NSOperation?项目中使用NSOperation的优点原创 2022-03-18 20:07:41 · 625 阅读 · 0 评论 -
NSLog的格式输出
如下:%@ 对象%d, %i 整数%u 无符整型%f 浮点/双字%x, %X 二进制整数%o 八进制整数%zu size_t%p 指针%e 浮点/双字 (科学计算)%g 浮点/双字%s C 字符串%.*s Pascal字符串%c 字符%C unichar%lld原创 2022-03-18 19:44:15 · 312 阅读 · 0 评论 -
UIView与CLayer有什么区别?
答:1).UIView 是 iOS 系统中界面元素的基础,所有的界面元素都是继承自它。它本身完全是由 CoreAnimation 来实现的。它真正的绘图部分,是由一个 CALayer 类来管理。 UIView 本身更像是一个 CALayer 的管理器,访问它的跟绘图和跟坐标有关的属性。2).UIView 有个重要属性 layer ,可以返回它的主 CALayer 实例。3).UIView 的 CALayer 类似 UIView 的子 View 树形结构,也可以向它的 layer 上添加子layer ,原创 2022-03-18 19:39:49 · 136 阅读 · 0 评论 -
C++和OC的区别
C++语言特点: 1.在C语言的基础上进行扩充和完善,使C++兼容了C语言的面向过程特点,又成为了一种面向对象的程序设计语言; 2.可以使用抽象数据类型进行基于对象的编程; 3.可以使用多继承、多态进行面向对象的编程; 4.可以担负起以模版为特征的泛型化编程。OC语言特点:原创 2012-12-19 22:44:59 · 3774 阅读 · 0 评论 -
iOS多线程编程及GCD简介
程序APP进程、线程、多线程1.程序是计算机(电脑,智能手机,机器人等有操作系统的智能新生物)指令的集合,以文件形式存储在磁盘上。 2.进程是一个正在运行的程序实例,是一个程序在其自身的地址空间中的一次执行活动。 3.进程由内核对象和地址空间组成。 4.线程由内核对象和线程栈组成,它是进程运行过程中的某个时间片,多核CUP时,线程就实现了同时运行。iOS提供四种多线程编程技术...原创 2019-01-15 22:58:57 · 920 阅读 · 0 评论 -
Block在iOS编程里的应用
一,明确两点1,Block可以访问Block函数以及语法作用域以内的外部变量。也就是说:一个函数里定义了个block,这个block可以访问该函数的内部变量(当然还包括静态,全局变量)——即block可以使用和本身定义范围相同的变量。 2,Block其实是特殊的Objective-C对象,可以使用copy,release等来管理内存,但和一般的NSObject的管理方式有些不同,稍后会说明。二,原创 2016-05-22 23:25:37 · 418 阅读 · 0 评论 -
OC内存管理
OC内存管理主要涉及到retainCount的管理内置变量可以直接赋值(assign),通常在method中把参数赋给成员变量时需要retain。alloc和new出来的对象引用系数为1,当给其它对象赋值时如果用到retain引用系数会加1,在销毁这个对象之前应该调用release使引用系数为0,每调用一次release引用系数-1;当您向一个对象发送一个autorelease,cocoa就会将对象的一个引用放入新的自动释放池当程序执行到作用域结束的位置时,自动释放池就会被释放,池中的所有对象也就被原创 2021-12-18 11:52:29 · 117 阅读 · 0 评论 -
iOS测试打包和持续集成
目录单元测试1、重要性、注意点2、逻辑测试、单元测试3、性能测试、异步测试流量功能性能测试异步测试压力测试4、UI测试5、持续化集成,自动化打包上线(Shell,Jenkins)单元测试1、重要性、注意点通常小项目不会做单元测试,但是如果你会的话,就是锦上添花的事了。对于大公司的迭代产品主要功能类,及核心模块开发,通常是有自己的测试团队的,但是如果你每次提交代码都是没有一些很low的bug,无疑能让你信服你的能力。对于会单元测试的编程人员,通常基于接口编程,测试驱动代码,代码也会比较规范。不会的原创 2021-05-10 23:25:16 · 287 阅读 · 0 评论 -
KVC\KVO 简介
一、定义:KVC 是OC一个非正式protocol,提供一种机制来间接访问对象的属性。KVO 是基于监控键值发生变化,通知观察者,典型的观察者模式承载者,KVC实现的关键技术之一。二、常见方法代码KVC:valueForkey:、setValue:forKey:valueForKeyPath:、setValue:forKeyPath:KVO:addObserver: forKeyPath:options:、removeObserver:forKeyPath:、observseVa原创 2021-03-21 15:55:44 · 223 阅读 · 0 评论 -
C语言基础
C语言 变量值传递,传递实参给形参,运算完毕不回传,为单向传递。c语言允许声明的时候没有形参,表示传参自由,但一般为了形象表明所传参数最好写上。行参也是局部变量,调用时分配空间。register int a;//表示把变量放在寄存器里volatile int a;//表示该变量随时可能因为外部原因中断或改变。局部变量在栈里分配空间, 全局变量在内存分配空间。静态变原创 2010-07-31 19:51:00 · 874 阅读 · 0 评论 -
iOS Core Animation 核心动画
Core Animation 核心动画Core Animation动画的三步骤:CALayer 和 UIView的关系CABasicAnimation基础动画隐式动画显式动画CAKeyFrameAnimation 关键帧动画CATransition 转场动画CAAnimationGroup 动画组Core Animation关于核心动画,如果想深入了解可以阅读《iOS核心动画高级技巧》这本书。所有复杂的动画都可以拆分成简单动画(对应路径的单一动画)的组合,这里仅对常用动画的使用做简单梳理。动画的三步骤原创 2021-01-25 17:09:09 · 311 阅读 · 0 评论 -
AWS SDK for iOS
文章目录AWS SDK for iOSFeatures / APIsVisit our [Web Site](https://aws-amplify.github.io) to learn more about Amplify Framework.SetupInclude the SDK for iOS in an Existing ApplicationCocoaPodsCarthageFram...原创 2019-09-04 18:30:52 · 1963 阅读 · 0 评论