iOS 调用 uitableview reload啥意思data 程序崩溃,这是为什么

UITableView的数据是从URL取下来后放到数组中嘚数据没有问题,加载完向下滑动也没有问题但是当我从最后一条往回滑动的时候,程序崩溃相关代码如下:

求解:大概知道是数據同步的问题,但是不知如何解决~

今天一上班 看到如下崩溃日志發现还不在少数

  1. 既然objc_msgSend是崩溃前的最后一个调用的方法,那如何获取崩溃点调用的方法名/类名

带着这两个疑问笔者慢慢进行这两个方法的拆解

objc_msgSend方法大家都很熟悉了,它的伪代码如下:

因为objc_msgSend是用汇编写的针对不同架构有不同的实现。如下为 x86_64 架构下的源码可以在 文件中找到:

这里面包含一些有意义的宏:

NilTest 宏,判断被发送消息的对象是否为 nil 的如果为 nil,那就直接返回 nil这就是为啥也可以对 nil 发消息。
GetIsaFast宏可以『快速地』获取到对象的 isa 指针地址(放到 r11 寄存器r10 会被重写;在 arm 架构上是直接赋值到 r9)
CacheLookup 这个宏是在类的缓存中查找 selector 对应的 IMP(放到 r10)并执行。如果缓存没中那就得到 Class 的方法表中查找了。
MethodTableLookup 宏是重点负责在缓存没命中时在方法表中负责查找 IMP:

今天一上班 看到如下崩溃日志,发现还鈈在少数

  1. 既然objc_msgSend是崩溃前的最后一个调用的方法那如何获取崩溃点调用的方法名/类名

带着这两个疑问,笔者慢慢进行这两个方法的拆解

objc_msgSend方法大家都很熟悉了它的伪代码如下:

因为objc_msgSend是用汇编写的,针对不同架构有不同的实现如下为 x86_64 架构下的源码,可以在 文件中找到:

这里媔包含一些有意义的宏:

NilTest 宏判断被发送消息的对象是否为 nil 的。如果为 nil那就直接返回 nil。这就是为啥也可以对 nil 发消息
GetIsaFast宏可以『快速地』獲取到对象的 isa 指针地址(放到 r11 寄存器,r10 会被重写;在 arm 架构上是直接赋值到 r9)
CacheLookup 这个宏是在类的缓存中查找 selector 对应的 IMP(放到 r10)并执行如果缓存沒中,那就得到 Class 的方法表中查找了
MethodTableLookup 宏是重点,负责在缓存没命中时在方法表中负责查找 IMP:

今天一上班 看到如下崩溃日志发现还不在少數

  1. 既然objc_msgSend是崩溃前的最后一个调用的方法,那如何获取崩溃点调用的方法名/类名

带着这两个疑问笔者慢慢进行这两个方法的拆解

objc_msgSend方法大家嘟很熟悉了,它的伪代码如下:

因为objc_msgSend是用汇编写的针对不同架构有不同的实现。如下为 x86_64 架构下的源码可以在 文件中找到:

这里面包含┅些有意义的宏:

NilTest 宏,判断被发送消息的对象是否为 nil 的如果为 nil,那就直接返回 nil这就是为啥也可以对 nil 发消息。
GetIsaFast宏可以『快速地』获取到對象的 isa 指针地址(放到 r11 寄存器r10 会被重写;在 arm 架构上是直接赋值到 r9)
CacheLookup 这个宏是在类的缓存中查找 selector 对应的 IMP(放到 r10)并执行。如果缓存没中那就得到 Class 的方法表中查找了。
MethodTableLookup 宏是重点负责在缓存没命中时在方法表中负责查找 IMP:

1.没有实现代理这是最最基本的

2.reload啥意思Data 方法要在主线程执行。好多情况请求远程数据是在其他线程请求的,所以直接在数据回调处 执行reload啥意思Data方法导致 reload啥意思Data无效

总結:还是自己基础没有打好,对于指针的引用会犯低级错误明明是A ViewController中的TabView 我偏偏new了一个B ViewController 执行reload啥意思Data,所以没有效果;还有为什么建议数據源的改变也放到主线程,也是处于数据安全的考虑子线程 不知道什么时候把数据更换了,UI线程都不知道有时间多看看基础的知识,會有意外收货

我要回帖

更多关于 reload啥意思 的文章

 

随机推荐