iOS
临四七巷朝小树
好记性不如烂笔头,也参考大神的文章,只为了让自己每天都进步一点点!
展开
-
面试什么时候用copy,strong,@property本质
面试经常问什么时候用copy,strong不可变的用copy修饰 可变的用strong- (void)testNOChange{ NSString *str = @"123"; NSLog(@"str = %p",str); str = @"456"; NSLog(@"after str = %p",str); /* 2021-07-22 14:01:48.151382+0800 ProtocolTest[7759:511625] str = .原创 2021-07-22 18:35:24 · 205 阅读 · 0 评论 -
ARM汇编基础
ios现在都是arm64汇编x0 - x7 用于子程序调用时的参数传递,超过八个会放到线上传递x0和w0时同一寄存器的不同尺寸,x0为8字节,w0为4字节,x0寄存器的低位4字节x0/w0还可以用于返回值的传递 ;是注释符号mov x1, x0 ;将寄存器x0 赋值给x1add x0,x1,x2 ;x0 = x1 + x2sub x0,x1,x2 ;x0 = x1 - x2mul x0,x1,x2 ;x0 = x1 * x2sdiv x0,x1,x2 ...原创 2020-09-01 19:09:33 · 1740 阅读 · 0 评论 -
有关APP架构设计的思路
涉及到组件化,模块化,里面有一个就是路由router来实现模块间的通信.原创 2020-07-24 16:51:02 · 2582 阅读 · 0 评论 -
LLVM学习
LLVM是一系列编译器和工具链技术的集合,模块化,可重用.专门为编程语言编写的程序编译时,链接时,运行时优化而设计.传统编译器分为前端、优化器、后端前端负责解析源代码,检查语法错误,将其翻译为抽象的语法树优化器对这一中间代码进行优化,试图使代码更高效后端将优化后的中间代码转为目标机器代码,最大化利用目标机器的特殊指令,提高代码性能前端解析器 + IR生成器 + LLVM后端目前xcode的前端使用 Clang...原创 2020-09-02 14:39:53 · 320 阅读 · 0 评论 -
fishHook的原理
在一些逆向过程中常常通过代码注入的方式来hook,在OC里面我们常常通过runtime交换imp来hook,但是今天我们试试facebook开源的fishhook,来了解对系统C函数的hookHOOK,俗称钩子,是iOS逆向中改变程序运行流程的一种技术,通过hook让别人的程序执行我们自己写代码.今天我们主要来学习下fishhook,是Fachbook提供一个动态修改链接Mach-O文件的工具,利用MachO文件加载原理,通过懒加载/非懒加载两个表的指针达到C函数Hook的目的.#import原创 2020-07-21 19:07:30 · 459 阅读 · 0 评论 -
iOS总结-性能工具Instruments
参考:https://help.apple.com/instruments/mac/current/#//apple_ref/doc/uid/TP40004652-CH3-SW1翻译中文版:http://cdn.cocimg.com/bbs/attachment/Fid_6/6_24457_90eabb4ed5b3863.pdf关于Instruments的使用,有利于我们在开发的过程中找到...翻译 2018-11-22 22:57:32 · 163 阅读 · 0 评论 -
iOS总结-有关UITouch事件(二)之 UIEvent
UIEvent在touch的四个方法里, NSSet * touches 和 UIEvent *event 两个参数一个完整的触摸过程中,只产生一个事件对象,4个触摸方法是同一个event参数两个手指同时触摸一个view,touchBegan:withEvent:方法,touches参数中装着2个UITouch对象可以根据touches中UITouch个数来判断单点还是多点触摸响...翻译 2018-12-13 00:09:13 · 564 阅读 · 0 评论 -
iOS总结-有关UITouch事件(三)之 UIResponder和响应者链条
参考:https://blog.csdn.net/zeng_zhiming/article/details/71747881https://www.jianshu.com/p/44a5b59e7e85https://www.jianshu.com/p/4ad8b71246f7UIResponderUIResponder类是专门用来响应用户的操作处理各种事件的,触摸事件Touch Ev...翻译 2018-12-13 14:11:19 · 452 阅读 · 0 评论 -
iOS总结-NSArray的底层实现
有关NSArray的不管是NSArray,还是nsmutable ,alloc之后的得到都是__NSPlacrholderArray.当我们nsarray一个空数组,得到的是__NSArray0nsarray只有一个元素时,得到的是__NSSingleObjectArrayInsarray.count > 1 时, 得到 __NSArrayInsmutablearray 返回的...翻译 2018-12-16 23:24:13 · 5754 阅读 · 1 评论 -
iOS总结-Runtime篇之黑魔法Method Swizzling的滥用会有危险吗
参考https://www.jianshu.com/p/19c5736c5d9a,http://blog.sina.com.cn/s/blog_a343f32b0101en4o.htmlruntime的Method Swizzling确实很方便,动态交换方法,所谓就是黑科技.其实就是C语言的Hook原理所谓的钩子.但是如果滥用,尤其是多个开发人员开发,就有可能造成坑.其中RSSwizz...翻译 2018-11-21 15:45:00 · 788 阅读 · 0 评论 -
iOS总结-Runloop篇(二)-RunLoop的内部实现
参考:https://blog.ibireme.com/2015/05/18/runloop/RunLoop的内部逻辑:实际上RunLoop就是这样一个函数,内部就是一个do-while循环,直到超时或者手动被停止,该函数才会返回RunLoop的底层实现RunLoop的核心是基于mach port 的,器进入休眠时调用的函数是mach_msg(),OSX/iOS的架构...转载 2018-11-12 11:23:21 · 192 阅读 · 0 评论 -
iOS总结-界面卡顿问题概要(一)
参考YY大神:https://blog.ibireme.com/2015/11/12/smooth_user_interfaces_for_ios/读大神的文章,也是自己学习巩固的过程。屏幕显示图像的原理CRT的电子琴按照综上到下一行行扫描,扫描完成后显示器就呈现一帧画面,随后电子枪回到初始位置继续下一次扫描。为了把显示器的显示过程和系统的视频控制器进行同步,显示器或其他硬件会用硬件时...转载 2018-11-15 16:33:06 · 619 阅读 · 0 评论 -
iOS总结-Runloop篇(一)
参考大神:https://blog.ibireme.com/2015/05/18/runloop/runloop的概念一般老说,一个线程一次只执行一个任务,执行完成之后线程退出.为了节省cpu资源,我们需要一个机制,让线程能随时处理事件并不退出.这种模型称为Event Loop.RunLoop实际就是一个对象,这个对象管理了其需要处理的事件和消息.内部就是一个循环,接受消息->等待-...翻译 2018-11-08 18:58:28 · 135 阅读 · 0 评论 -
iOS总结-Runloop篇(三)-RunLoop的实现的功能
参考大神:https://blog.ibireme.com/2015/05/18/runloop/AutoreleasePool关于自动释放池,之前已经总结过了。它是和Runloop密切相关的。APP启动后,苹果在主线程RunLoop里注册了两个Observer,其回调是_wrapRunLoopWithAutoreleasePoolHandler(),第一个Observer监视的事...转载 2018-11-13 16:11:07 · 686 阅读 · 2 评论 -
iOS总结-内存的几大区域
参考: https://www.jianshu.com/p/de1418dc031a1.栈区(stack)由编译器自动分配并释放,存放函数的参数值,局部变量等.栈是系统数据结构,对应线程/进场是唯一的.优点快速高效缺点数据不灵活 先进后出栈空间分静态分配和动态分配两种静态分配是编译器完成的,比如自动变量(auto)的分配动态分配由alloca函数完成栈的动态分配无需释放,是...翻译 2018-11-01 20:10:29 · 280 阅读 · 0 评论 -
iOS总结-NSDictionary的底层实现
参考:https://blog.csdn.net/zixiweimi/article/details/56677203NSDictionary(字典)是使用hash表来实现key和value之间的映射和存储的。hash函数设计的好坏影响着数据的查找访问效率。数据在hash表中分布的越均匀,其均匀效率越高。在oc中,通常是利用NSString来作为键值,其内部使用的hash函数也是通过使用NSSt...翻译 2018-12-17 12:42:12 · 1358 阅读 · 0 评论 -
iOS总结-APP程序启动周期
参考https://www.jianshu.com/p/d60b388b19f5执行流程:1.程序入口 进入main函数,设置AppDelegaye称为函数代理2.程序完成加载 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launch...翻译 2018-12-11 23:41:46 · 176 阅读 · 0 评论 -
iOS-对象的本质-一个OC对象占多少内存
我们平常敲的Objective-C代码,底层实现其实是C/C++代码.那么一个OC对象占用多少内存.iOS开发中Objective-C和swift用的是Clang/LLVM来编译的.使用的clang编译器编译成cpp,xcodebuild负责将OC/Swift工程编译成xxx.app,xcrun负责给xxx.app签名并打包成xxx.ipa#import <Foundation...原创 2019-08-16 19:26:59 · 2811 阅读 · 0 评论 -
iOS总结-APP启动过程-main()函数执行前
APP启动的快慢,直接决定了用户的体验好坏,毕竟往往第一印象是真的很重要的!APP启动分为三个阶段:main函数执行前,main函数执行后,首屏渲染完成后.main启动前:首先说下Mach-O文件Mach-O文件格式是OSX与iOS系统上的可执行文件mach-o主要分为三部分:Header头部,保存了一些基本信息,包含可以执行的CPU结构,比如x86,arm64LoadComm...原创 2019-07-05 16:16:46 · 1057 阅读 · 0 评论 -
iOS总结-有关CAAnimation
有关动画,我们可能用UIView的动画,或是会用到CABasicAnimation比较多一点.有关CAAnimation的基础知识结构图,我简单画了个图CABasicAnimation通过设置keyPath来设置类型duration:动画时长fromValue/toValue 动画起始位置,根据keypath不同,传值不同.reaptCount重复次数设置动画在执行结束后不返回原来位...原创 2019-07-02 18:48:15 · 216 阅读 · 0 评论 -
有关APP架构的感想
参考:https://tech.antfin.com/docs/2/49549 读CodeHub#1 回顾 | 敏捷开发与动态更新在支付宝 App 内的实践这篇文章可以详细的了解有关支付宝在移动端如何变成一个超级APP的.支付宝的实现的移动中台覆盖了APP生命全周期,提供强大的支撑,形成了有力的闭环。我们经常会被问到有关架构的设计的问题,参照支付宝这个超级App的架构,我们能学习到很多...翻译 2019-04-23 00:19:52 · 180 阅读 · 0 评论 -
CFNetwork框架解析(一)
iOS网络编程层次模型分为三层:Cocoa层:NSURL, GameKit,WebKitCore Foundation层: 基于C的CFNetwork 和 CFNetServicesOS层:基于C 的 BSD socketCFNetwork只是对BSD socket 进行了轻量级的封装,但在iOS中使用CFNetwork的好处是CFNetwork与系统级别的设置以及runloop结合很好,...翻译 2019-03-13 16:31:09 · 2682 阅读 · 0 评论 -
iOS总结-锁(二)之synchronized的内部实现原理
参考:http://ios.jobbole.com/82826/关于@synchronized,我们经常应用到写单例的时候,在多线程的情况下,进行加锁操作.锁是如何传入@synchronized的对象关联上的?如果传入@synchronized的对象在@synchronized的block里面被释放或者被赋值为nil会怎样?@synchronized block 会变成objc_sync_...翻译 2019-01-09 14:34:35 · 3131 阅读 · 0 评论 -
iOS总结-锁(一)
参考:https://www.jianshu.com/p/8b8a01dd6356在平时开发中,我们经常使用到多线程,但是同时会带来Data race .而我们可以用到锁,我们在使用多线程的时候多个线程可能会被访问同一块资源,这样就很容易引发数据错乱和数据安全等问题,这时候就需要我们保证每次只有一个线程访问这一块资源,锁应运而生。ibireme大神不在安全的OSSpinLock 中有关9种锁...翻译 2019-01-08 19:54:33 · 159 阅读 · 2 评论 -
iOS总结-有关UITouch事件(一)
在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接受并处理事件.我们称为响应者对象.UIApplication / UIViewController / UIView都继承自 UIResponder,因此它们都是响应者对象,都能够接收并处理事件.事件分为三大类型,并且UIResponder内部提供了相应方法来处理事件触摸事件加速计事件远程控制事...翻译 2018-12-12 20:55:26 · 139 阅读 · 0 评论 -
iOS总结-UIViewController/UIView生命周期
参考: https://www.jianshu.com/p/d60b388b19f5有关viewController的生命周期storyBoard情况下的周期非storyBoard下的周期1.initWithNibName:bundle:初始化UIViewController,执行关键数据初始化操作,非storyBoard创建UIViewController调...翻译 2018-12-12 11:26:30 · 1196 阅读 · 1 评论 -
iOS总结-多线程篇之NSOperation和NSOperationQueue
参考:https://www.jianshu.com/p/4b1d77054b35NSOperation/NSOperationQueue是基于GCD更高一层的封装,完全面向对象。优点:1.可添加完成的代码块,在操作完成后执行 2.添加操作之间的依赖关系,方便控制执行顺序 3.设定操作的优先级 4.可以很方便的取...翻译 2018-10-30 23:25:28 · 1478 阅读 · 0 评论 -
iOS总结-Runtime篇之用途及面试题的总结之动态增加方法/NSCoding的自动归档和自动解档
之前写的有关Runtime篇之类的消息传递里面已经讲到了,就是利用+(BOOL)resolveInstanceMethod:(SEL)sel方法,调用class_addMethod()来实现动态添加方法自动归档和自动解档 主要通过ivar_getName方法来获取成员变量列表...翻译 2018-10-21 22:25:47 · 279 阅读 · 0 评论 -
iOS总结-Runtime篇之用途及面试题的总结之字典模型互换
字典转模型许多第三方的字典转model,如MJExtension,都是利用runtime进行转换的。下面也是简单的实现,真正用到的基本上就是NSArray/NSDictionary/NSString/基本数据类型,各种嵌套,其中主要实现逻辑对NSArray和NSDictionary拆开单独处理,对于自定义类型,则直接递归处理,像剥洋葱一样,一层层剥开,嵌套的形式很多.具体逻辑参...翻译 2018-10-23 00:25:55 · 155 阅读 · 0 评论 -
今天关于热更新,苹果发飙了
今天,好多IOS开发里面用到JSpatch,以及部分React native ,Weex来实现热更新的开发者,收到苹果的警告邮件:Dear Developer,Your app, extension, and/or linked framework appears to contain code designed explicitly with the capability to ch转载 2017-03-08 14:58:08 · 397 阅读 · 0 评论 -
有关cocoaPods的一些坑
如果之前你已经装了cocoapods,那么直接cd对应工程目录下,pod install !下面是我遇到的问题: 1.Error running 'requirements_osx_brew_update_system ruby-2.4.0',showing last 15 lines of /Users/LuohanCC/.rvm/log/1436950973_ruby-2.0原创 2017-02-23 17:07:27 · 1061 阅读 · 0 评论 -
有关上传到APPStore上iphone5,5c,4s下载应用,出现该APP与设备不兼容问题
上架的app,用5c,4s,5不能够下载,提示APP和设备不兼容问题.之前也出现过上传到蒲公英,生成测试包的时候,也出现这问题,也就没在意.后来询问蒲公英客服,给回了邮件,才发现也是这个原因导致的.解决办法:也就是把Build Settings 里面的Build Active Architecture Only 里面的Release 设置为NO原创 2016-11-23 15:26:52 · 4111 阅读 · 0 评论 -
IOS 10 中关于提交AppStrore所遇到的问题(一)
有关ios10的各种资料的整理请参考:http://ios.jobbole.com/89028/原创 2016-09-18 14:15:05 · 539 阅读 · 0 评论 -
有关OC中关于点方法的底层实现的研究
都知道oc的底层都是有C语言写的,而且我们经常会发现一些大神写的第三方框架里面经常会出现而里面的self->_costLimit其实就是C语言里面的结构体指针,它有两种写法:(1)x->y(2)(*x).y这两种方式都是通过指向指针的存储变量的地址来获取到变量数据打印的结果:会发现结果一致.也就是说OC中的self.amountTextField.text的点方法实原创 2016-10-18 11:32:08 · 159 阅读 · 0 评论 -
xcode8新建工程多出来的很乱的打印东西,如何消除
2016-09-18 11:42:39.976041 JSPatchDemo[1112:62987] subsystem: com.apple.UIKit, category: HIDEventFiltered, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_sympto原创 2016-09-18 11:49:34 · 1451 阅读 · 0 评论 -
关于如何限定UITextField只能输入一个小数点的代码
当我们在做支付的时候,有时候需要对输入的的数字进行限制,其中就有对小数点的限制,只能输入一个小数点- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ /*原创 2016-09-06 12:33:34 · 1586 阅读 · 0 评论 -
修改状态栏的颜色为白色
状态栏里面是有2种颜色,UIStatusBarStyleDefault(黑色)和UIStatusBarStyleLightContent(白色)如果需要设置成白色,首先需要在info.plist文件里View controller-based status bar appearance设置为NO,如果没有,添加这一项.系统默认的是YES,这里设置是为了全局设置成No,方便你在具体的类里原创 2016-09-06 11:45:16 · 455 阅读 · 0 评论 -
为什么在6plus上打印的屏幕高度是6的高度
在一次适配的时候,打印6plus的屏幕高度时,发现打印的是6的高度.很是困惑,后来发现是因为我的手机设置.设置->显示与亮度->视图->放大将放大改为标准就ok 了原创 2016-09-06 10:23:08 · 223 阅读 · 0 评论 -
message sent to deallocated instance 0x154eec600
在准备提交新的应用时,发现地图在不停切换到导航的时候,会出现很大概率的闪退。后经我们通宵的寻找终于找到原因是因为野指针。我是利用僵尸对象来实现监控每次生成对象的dealloc,出现这原因就是对象提前释放掉了,成为了野指针。僵尸模式调试步骤: 1、 在 Xcode 菜单 Product ->Scheme-> EditScheme -> Diagnostics 设置窗口中直接勾上E原创 2016-09-05 12:38:39 · 819 阅读 · 0 评论 -
UILabel里当多行时,设置行距的大小
在做一次弹框的时候,里面显示的是一个公告,需要设置行距的大小.#define UISCREEN_WIDTH [UIScreen mainScreen].bounds.size.width@implementation UILabel (StringFrame)- (CGSize)sizeWithText:(NSString *)text andFo原创 2016-09-12 17:39:01 · 576 阅读 · 0 评论