摘要:
在 OC 中,类的一个实例定义如下: /// Represents an instance of a class.struct objc_object { Class _Nonnull isa OBJC_ISA_AVAILABILITY;};即每一个对象,都有一个 isa 指针,指向它的 CLASS。而 CLASS 定义如下: /// An opaque type that repre... 阅读全文
摘要:
原理类的方法类别中,选择子的名称通过映射表找到应该调用的方法。如下所示:OC 的运行时提供了几个方法可以操作这张表。可以向其中新增选择子,改变选择子的实现,或者交换选择子映射到的指针。在上图中,交换了 lowercaseString 和 uppercaseString 方法实现,新增了一个选择子 newSelector,修改了 capitalizedString 的实现。 方法交换实现 De... 阅读全文
摘要:
问题有一个 1000 个 cell 的 tableView,刚刚进入界面时,contentOffset 为 0。用手快速滑动 tableView,直至最下面一个 cell 显示在屏幕上。这个过程中,cellForRow 被调用了几次呢? 手写 demo新建一个工程,只有一个 tableView,然后从上滚到下。在 cellForRowAtIndexPath方法中把 row 加到数组中,然后滚动停... 阅读全文
摘要:
C 的函数调用方式C 语言使用静态绑定,即在编译器就可以决定运行时所应调用的函数。编译器在编译代码的时候就已经知道程序中有相应的函数,并直接生成调用函数的指令。函数地址硬编码在指令之中。 OC 中函数调用OC 中在对象上调用方法,称为“消息传递”。如下: id returnValue = [someObject messageName:parameter] 编译器看到这个之后,转化为标准的 ... 阅读全文