iOS 杂记

真机上如何实现模拟器"Slow Animation"的效果?

  • 利用lldb,断点后执行以下命令即可 p [(CALayer *)[[[[UIApplication sharedApplication] windows] objectAtIndex:0] layer] setSpeed:.1f]
日志文件中包含太多[32m、[0m 这样的字符,影响查看怎么办?
  • 这其实是终端的一种用于表示颜色的编码,可以使用 less log_path 命令来查看日志,可以正常显示出相应的颜色。
  • cat到terminal查看,还可以看到颜色
Xcode code snippet 如何能云同步呢?
  • Xcode中的代码片段默认放在这个目录中: ~/Library/Developer/Xcode/UserData/CodeSnippets 创建一个git repo,设置链接,就可以轻松使用git管理了
私有对象,使用成员变量定义,还是preporty定义?
  • 现在项目中只有很少的一部分老代码使用了成员变量,现在开发基本都是property,property会自动生成一个对应的成员变量,同时合成getter setter方法 porperty 使用相对便捷,而且支持 getter 和 setter,成员变量相对成本更低一些,所以包大小会小一些,性能会好一点
  • 需要 lazy load 的话还是 property 更方便
  • 在 block 中传递和访问成员变量 Crash 的 case 经常发生
如何在runtime环境下,通过方法名来调用类的无参数静态方法? 如,ClassX,类方法名为 dummy,无参数无返回值。
  • 先通过NSSelectorFromString获取sel,再通过methodForSelector:获取sel对应的函数指针imp,将imp强转为函数,直接调用这个函数
  • 类似于 idle 或者刷新类的,一直调用的方法,可以直接写成函数,避开走消息转发可以提高效率和较少一丢丢二进制代码量
    NSMethodSignature *signature = [clz methodSignatureForSelector:selector];
    NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
    [invocation setSelector:selector];
    [invocation setTarget:clz];
    [invocation setArgument:&model atIndex:2];
    [invocation setArgument:&trackContext atIndex:3];
    [invocation setArgument:&componentContext atIndex:4];
    [invocation invoke];
  • 用C语言的dlsym()方法可在内存中寻找"string_function"静态方法,并返回函数指针;判空后即可调用。
  • libffi了解一下
OC里的block为什么要判空后再调用?
  • 从原理上来说,每个 Block 都是一个 struct,内部有个 fn 指针,最终调用 block(xxx) 的时候实际是调用这个指针指向的函数,为空就崩了
  • block clang后是一个结构体,通过这个结构体去调用block实现的函数指针,不判空就是 NULL->funcPtr
  • oc里的block会被重写为一个结构体(类的结构),其中block中的代码块会被放在一个静态函数内,结构体的函数指针指向该静态方法。若block为空,此函数指针即为空,调用时就会引发EXC_BAD_ACCESS类型Crash
开发中我们如何快速定位内存泄漏问题?
Xcode 使用lldb调试时遇到id指针时的属性访问方式
  • 在Xcode的lldb调试的时候对于id指针使用.表达式访问会提示找不到属性,这时可以通过消息进行调用,就可以正常输出或者执行了
  • 中括号是消息发送,不需要知道是什么类型;点语言点出对应的属性,需要知道是哪个类才可以索引出来
Xcode 实用快捷键,提高工作效率
  • ctrl+i 格式化代码
  • cmd + shift + o 快速查找
  • command+shift+j 快速定位到文件
  • control+command+r 跳过编译装上次编译好的包
  • control+command+向上箭头 在.m文件快速切换到.h文件
  • control+command+向下箭头 在.h文件快速切换到.m文件
如何给 UIView block 动画添加自定义时间函数
  • CATransaction,我先来个吧~
  • CAAnimation动画都可以通过设置timingFunction实现自定义的时间函数
  • 贝塞尔 + DisplayLink 可行不
  • 在UIView block外围用CATransaction包起来(begin, commit方法),调用CATransaction的类方法setAnimationTimingFunction。
property 中 copy 的意义?
__block 解决了什么问题?
  • 修改block内引用变量的可变性,一般用于局部变量
静态库和动态库有什么主要区别?
  • 静态库在编译时链接到代码中,动态库在运行时载入;动态库能让库更好的复用~
  • 印象中 iOS 这边系统的动态库才是程序运行时由系统动态加载,由多个程序共享;我们自己写的动态库只能是 App 与 Extension 之间共享,并且要设置成 embedded framework 才能在 App 启动的时候加载到,否则就报 Image Not Found 错误了。所以其实我们自己写的动态库某种意义上也只是静态库罢了。
  • 细说iOS的静态库和动态库:https://juejin.im/post/6844904031937101838
  • 动态库只能依赖动态库,如果LiveKit改成动态库,那么它依赖的所有库都必须是动态库,改造成本太高。 对包大小没有明显收益,对宿主的启动速度有劣化风险。
给局部变量增加static关键字会产生什么影响?
  • 这个地方的局部变量值创建一次,并且不会被销毁,跟随整个app的生命周期
  • 不会改变作用域,但会改变生命周期;只会初始化一次,下次的使用的值基于上次的结果的值
  • 会存入data段
OC 协议能有默认实现吗?
Category 中通过关联对象实现(getter,setter)的 property 通过 KVO可以监听其变化吗?原理?
OC 中有哪些hook方法的姿势?

待补充

什么是离屏渲染?哪些情况下会触发离屏渲染?

待补充

为什么要对NSTimer进行一层封装?
  • 主要是防止忘了处理timer,导致循环引用
  • 这个问题的细节可以引申一下,中台的timer处理,为什么采用了block方式,没有采用https://juejin.im/post/6844903968250789896 里提到的proxy方式
    1. 解决target循环引用的问题;2. 屏蔽NSTimer和runloop的关系。
你遇到过哪些循环引用的case?
_reportTimer = [NSTimer scheduledTimerWithTimeInterval:timeInterval target:self selector:@selector(reportPlayingStatus) userInfo:nil repeats:YES]; (一不小心就会泄露..)
#define XLiveLinkInline(PROTOCOL) ((id<PROTOCOL>)xLiveLinkInlineFunc(@protocol(PROTOCOL),self))   xlivelinkinline里是有self的,使用时需要注意
声明 block 的时候为什么使用copy,而不用strong?
什么是 Target-Action?你知道有哪些使用 Target-Action 的方式来响应事件?

待补充

如何看待在代码中频繁使用 #if DEBUG 这样的环境宏判断?

待补充

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容