日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

dealloc时取weakself引起崩溃

發布時間:2023/12/18 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dealloc时取weakself引起崩溃 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天無意這中遇到一個奇怪的崩潰,先上引起崩潰的代碼:

- (void)dealloc {__weak __typeof(self)weak_self = self;NSLog(@"%@", weak_self); }

當執行到dealloc的時候,程序就crash 掉了。
崩潰信息如下:

objc[4572]: Cannot form weak reference to instance (0x160f6f890) of class MFChatRoomBoardController. It is possible that this object was over-released, or is in the process of deallocation. (lldb) error: empty command (lldb) bt * thread #1: tid = 0x35914d, 0x0000000182307aac libobjc.A.dylib`_objc_trap(), queue = 'com.apple.main-thread', stop reason = EXC_BREAKPOINT (code=1, subcode=0x182307aac)* frame #0: 0x0000000182307aac libobjc.A.dylib`_objc_trap()frame #1: 0x0000000182307b24 libobjc.A.dylib`_objc_fatal(char const*, ...) + 88frame #2: 0x0000000182319890 libobjc.A.dylib`weak_register_no_lock + 316frame #3: 0x0000000182320688 libobjc.A.dylib`objc_initWeak + 224frame #4: 0x000000010022bf8c MakeFriends`-[MFChatRoomBoardController dealloc](self=0x0000000160f6f890, _cmd="dealloc") + 36 at MFChatRoomBoardController.m:31

其中,可以在控制臺明確看到這樣一段描述:

objc[4572]: Cannot form weak reference to instance (0x160f6f890) of class MFChatRoomBoardController. It is possible that this object was over-released, or is in the process of deallocation.

說明不允許在 dealloc 的時候取 weak self.

查看了一下 weak_register_no_lock 的函數代碼,找到問題所在。

id weak_register_no_lock(weak_table_t *weak_table, id referent_id, id *referrer_id) {objc_object *referent = (objc_object *)referent_id;objc_object **referrer = (objc_object **)referrer_id;if (!referent || referent->isTaggedPointer()) return referent_id;// ensure that the referenced object is viablebool deallocating;if (!referent->ISA()->hasCustomRR()) {deallocating = referent->rootIsDeallocating();}else {BOOL (*allowsWeakReference)(objc_object *, SEL) = (BOOL(*)(objc_object *, SEL))object_getMethodImplementation((id)referent, SEL_allowsWeakReference);if ((IMP)allowsWeakReference == _objc_msgForward) {return nil;}deallocating =! (*allowsWeakReference)(referent, SEL_allowsWeakReference);}if (deallocating) {_objc_fatal("Cannot form weak reference to instance (%p) of ""class %s. It is possible that this object was ""over-released, or is in the process of deallocation.",(void*)referent, object_getClassName((id)referent));}// now remember it and where it is being storedweak_entry_t *entry;if ((entry = weak_entry_for_referent(weak_table, referent))) {append_referrer(entry, referrer);} else {weak_entry_t new_entry;new_entry.referent = referent;new_entry.out_of_line = 0;new_entry.inline_referrers[0] = referrer;for (size_t i = 1; i < WEAK_INLINE_COUNT; i++) {new_entry.inline_referrers[i] = nil;}weak_grow_maybe(weak_table);weak_entry_insert(weak_table, &new_entry);}// Do not set *referrer. objc_storeWeak() requires that the // value not change.return referent_id; }

可以看出,runtime 是通過檢查引用計數的個數來判斷對象是否在 deallocting, 然后通過

if (deallocating) {_objc_fatal("Cannot form weak reference to instance (%p) of ""class %s. It is possible that this object was ""over-released, or is in the process of deallocation.",(void*)referent, object_getClassName((id)referent));}

這段代碼讓程序crash。

再看一下 _objc_fatal 這個函數

void _objc_fatal(const char *fmt, ...) {va_list ap; char *buf1;char *buf2;va_start(ap,fmt); vasprintf(&buf1, fmt, ap);va_end (ap);asprintf(&buf2, "objc[%d]: %s\n", getpid(), buf1);_objc_syslog(buf2);_objc_crashlog(buf2);_objc_trap(); }

可以看到這個函數實際會在控制臺輸出一段信息,然后調用 _objc_trap() 引起 crash. 而最后一個函數調用剛好也對上我們之前的崩潰堆棧。



轉自:http://www.jianshu.com/p/841f60876180

轉載于:https://www.cnblogs.com/huangzs/p/7455404.html

總結

以上是生活随笔為你收集整理的dealloc时取weakself引起崩溃的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久操精品 | 欧美日韩福利视频 | 伊人看片 | 日本亚洲一区二区三区 | 日本一区中文字幕 | 国产精品一区二区av白丝下载 | 99久国产 | 亚洲婷婷在线观看 | 男生看的污网站 | 天天av综合 | av观看免费在线 | 97在线观看免费视频 | 亚洲成av人片在线观看无 | 亚洲国产欧美在线观看 | 欧美一区二不卡视频 | 国产成人精品亚洲日本在线观看 | 久久久精品综合 | 亚洲一区成人 | 五月婷婷网 | 国产福利小视频在线观看 | 91超碰在线观看 | 91射射| 超碰女| 大地资源影视在线播放观看高清视频 | 男人的天堂久久久 | 亚洲成人一区二区三区 | 日日夜夜干 | 男女操操| 亚洲亚洲人成综合网络 | 日本精品一区视频 | 无码一区二区三区 | 我们2018在线观看免费版高清 | 午夜天堂av | 欧美日韩成人免费 | 夜夜嗨av禁果av粉嫩avhd | 中国一级片黄色一级片黄 | 成年人在线免费观看 | 痴女扩张宫交脱垂重口小说 | 熟女国产精品一区二区三 | 中文文字幕一区二区三三 | 伊人逼逼 | 久久夜色av | 少妇全黄性生交片 | 午夜免费片 | 在线观看中文 | 欧美日本久久 | 久久女同互慰一区二区三区 | 国产成人精品无码免费看夜聊软件 | av无码久久久久久不卡网站 | 成人短视频在线播放 | 国产精品99在线观看 | 亚洲国产精品天堂 | 69视频在线播放 | 国产精品一区麻豆 | 欧美精品极品 | 中文字幕乱码一区 | 国产精品无码一区二区三区免费 | 日韩视频二区 | 亚洲美女啪啪 | 国产精品日韩精品 | 欧美双性人妖o0 | 精品免费一区二区三区 | 疯狂做受xxxx国产 | 日韩操操操| 欧美a视频在线观看 | 国产女优在线播放 | 特大黑人巨交吊性xxxx视频 | 爱久久 | 91精品国产自产精品男人的天堂 | 久热这里只有精品在线 | 欧美 亚洲 另类 偷偷 自拍 | 91精品国产高清 | 色屁屁www| 成人毛片在线视频 | 一区二区精彩视频 | 91禁在线动漫| 亚洲精品综合精品自拍 | 天天爽夜夜爽 | 清清草在线视频 | 国产激情精品一区二区三区 | 久久国产精品二区 | 一级片aaaa | 国产精品视频一区二区三区 | 免费在线你懂的 | 日韩男人天堂 | 91九色porny视频 | 九一九色国产 | 成人做爰黄 | 黑鬼大战白妞高潮喷白浆 | 伦理久久 | 反差在线观看免费版全集完整版 | 三级视频在线观看 | 97超碰人 | 日韩avxxx| 人人爱人人搞 | 成人亚洲一区 | 黄色片在线播放 | 免费黄网在线观看 | 中文av网|