240 发简信
IP属地:北京
  • objc_msgSend()汇编核心探索(arm64架构)

    寄存器对应须知: id objc_msgSend(id self, SEL _cmd,...)汇编实现 其汇编实现等价于C语言实现: 注意:这里CacheLookup、Tai...

  • objc_msgSend()汇编核心探索(x86_64架构)

    寄存器对应须知: id objc_msgSend(id self, SEL _cmd,...)汇编实现 其汇编实现等价于C语言实现: 注意:(0)汇编“函数”与C/OC函数的...

  • “如果self是nil,[super init]也返回nil,。。。”这句话感觉因果关系有点儿不对哎,如果[super init]返回nil,根据父类init的标准实现,在父类中self就已经为nil了吧,来到子类时它们自然相等吧。这又引出了一个问题:父类[super init]返回不为nil,父类中self自然也不为nil且等于[super init];父类[super init]返回为nil,父类中self自然也为nil;即无论属性初始化成功与否,来到子类时都相等。当然,标准实现不会执行子类if里的语句,而另类实现`self == [super init]`会执行子类if里的语句这是显然的。

    self = [super init]的思考

    个人学知识还是想尽量学的明白些,否则觉着不顺畅,虽然很早就看苹果官方文档,https://developer.apple.com/library/ios/documentat...

  • 人家都说了“从子线程回到主线程”,默认代码是在子线程中的,不会卡死的。

    iOS面试题及答案

    1、设计模式是什么? 你知道哪些设计模式,并简要叙述? 2、MVC 和 MVVM 的区别 3、#import跟 #include 有什么区别,@class呢,#import<...

  • GCD-主线程上同步执行主队列任务卡死的原因

    主线程的特点:主线程会先执行主线程上的代码,然后去执行主队列中的任务。同步执行dispatch_sync函数的特点:只有执行完通过该函数添加到某个队列的任务执行完,才会返回。...

  • 120
    APP启动时间优化[WWDC2016-406]

    APP启动时间优化 WWDC 2016 Session 406 内容概括,讲述如何优化 App 的启动时间。 App 运行理论 main() 执行之前的事情Mach-O 格式...

  • `sNotifyObjCInit`的赋值是在`_objc_init`,也即是函数`doInitialization `执行后,可是`notifySingle `的调用却是在之前,顺序是不是有问题?不是应该先赋值再调用吗?想了很久没想通,望解答。

    OC底层原理十五:dyld 应用程序加载

    OC底层原理 学习大纲[https://www.jianshu.com/p/9e19354c0266] 实际开发中,大部分人都只知道main是程序的入口。但是app在启动前,...

  • 总结的很好,就是最后的流程图中第一个“检查bucket是否是数组中的第一个”的“是”和“否”标反了。

    OC底层原理十二: objc_msgSend(方法快速查找)

    OC底层原理 学习大纲[https://www.jianshu.com/p/9e19354c0266] 上一节已了解类的cache结构和插入操作。但是有几个问题: 1. 何时...

  • 120
    ARM64 汇编——寄存器和指令

    iOS 中的 armv7,armv7s,arm64 这些都代表什么? ARMv7|ARM7s|ARM64都是ARM处理器的指令集真机32位处理器需要ARMv7,或者ARMv7...

  • 为什么每次调用前,都要先强转成id类型?感觉转不转都一样啊。。。

    OC底层原理十: 类的深入理解

    OC底层原理 学习大纲[https://www.jianshu.com/p/9e19354c0266] 上一节[https://www.jianshu.com/p/03d10...

  • 总结的非常好,不过有个小瑕疵:要想拿到类的bits,偏移32的应该是类的首地址,而不是isa。

    OC底层原理九:类的原理分析

    OC底层原理 学习大纲 上一节我们了解了isa的内部结构,了解了结构和类的关系。 现在,我们用代码来探究下isa的指针指向与类的关系 1. 类与isa指针的关系 在objc4...

  • @markhetao 明白了,进入了alloc类方法并不能说是因为NSObject进入的,实际上NSObject确实不会进入runtime层的alloc类方法。设置[NSObject alloc]断点和符号断点callAlloc后,callAlloc函数内部调用情况如下:
    【NSArray】 - alloc -【NSArray】- - allocWithZone:
    【NSThread】 - _objc_rootAllocWithZone -
    【_NSThreadData】 - _objc_rootAllocWithZone -
    【NSMutableDictionary】 - alloc - NSMutableDictionary - allocWithZone:-
    【_NSStateMarker】- alloc -`_NSStateMarker`- _objc_rootAllocWithZone -`_NSStateMarker`- _objc_rootAllocWithZone -`_NSStateMarker`- _objc_rootAllocWithZone -`_NSStateMarker`- _objc_rootAllocWithZone -
    【NSSet】 - alloc -`NSSet` - allocWithZone:-
    【NSUUID】- alloc -`NSUUID` - allocWithZone:-
    【NSSet】 - alloc -`NSSet` - allocWithZone:-
    【NSUUID】- alloc -`NSUUID` - allocWithZone:-
    【NSSet】 - alloc -`NSSet` - allocWithZone:-
    【NSUUID】- alloc -`NSUUID` - allocWithZone:-
    ---> main.m中的【NSObject alloc】---> 【但未走类方法+(id)alloc】 ---> objc_alloc ---> callAlloc ---> _objc_rootAllocWithZone: -
    疑问:
    (1)基类NSObject在完成初始化前,会有一些类【优先】完成初始化,能这样说吗?
    (2)您确定LLVM底层有NSObject的alloc实现吗?我感觉它不存在似乎也说得过去,毕竟单有`_objc_rootAllocWithZone`函数就能完成基类的初始化。

    OC底层原理五: NSObject的alloc分析

    OC底层原理 学习大纲[https://www.jianshu.com/p/9e19354c0266] 在编译时,发现两个问题:问题1. NSObject的alloc方法不走...

  • @markhetao 看到了您的更新,但我还是有些疑问:
    [HTTest alloc] ---> LLVM层的 ---> objc_alloc ---> callAlloc中的 objc_msgSend(alloc) ---> ??? ---> +(id)alloc ---> _objc_rootAlloc ---> callAlloc中的`_objc_rootAllocWithZone(cls, nil)`,这是一个普通类实例化对象时的简单流程,您的意思是这个流程中的???又去了LLVM层?而不是直接调用了runtime层中的+(id)alloc类方法?

    OC底层原理五: NSObject的alloc分析

    OC底层原理 学习大纲[https://www.jianshu.com/p/9e19354c0266] 在编译时,发现两个问题:问题1. NSObject的alloc方法不走...

  • [HTTest alloc]会执行callAlloc两次不是因为第一次进入时被发送到了alloc方法,而alloc方法调用_objc_rootAlloc方法,_objc_rootAlloc方法又调用callAlloc吗?它和NSArray的第二次进入callAlloc的原因一样啊,和LLVM无关吧?

    OC底层原理五: NSObject的alloc分析

    OC底层原理 学习大纲[https://www.jianshu.com/p/9e19354c0266] 在编译时,发现两个问题:问题1. NSObject的alloc方法不走...

  • 仅设置符号断点`objc_alloc`,不设置"[NSObject alloc]",经多次尝试,发现进入函数`objc_alloc(Class cls)`时携带的参数cls依次分别为`NSArray`、` _NSStateMarker`、` _NSStateMarker`、`_NSStateMarker`、`_NSStateMarker`、`NSSet`、`NSUUID`、` NSSet`、`NSUUID`、`NSSet`、`NSUUID`、`NSObject`

    OC底层原理五: NSObject的alloc分析

    OC底层原理 学习大纲[https://www.jianshu.com/p/9e19354c0266] 在编译时,发现两个问题:问题1. NSObject的alloc方法不走...

  • 您设置的优化等级是哪个?断点是几个一起打的还是打完一个编译项目再打另一个(我发现打得方式不同,走的流程都不一样,这就导致完全一样的断点数目和位置,你所说的“正常对象的alloc流程”根本无法确定)?

    OC底层原理五: NSObject的alloc分析

    OC底层原理 学习大纲[https://www.jianshu.com/p/9e19354c0266] 在编译时,发现两个问题:问题1. NSObject的alloc方法不走...

个人介绍
代码表达世界,编程表现人生