美文网首页
IOS开发 日常踩坑记录

IOS开发 日常踩坑记录

作者: xiao蜗牛 | 来源:发表于2018-08-23 20:02 被阅读13次

Block 内部使用NSAssert导致的循环引用的问题

[self test:^{
    NSAssert(parameter,@"parameter can not be nil.");
}]

在block中使用NSAssert会导致循环引用,因为NSAssert宏中使用了强引用self, 在外面声明成weakself也没有用,因为block里的NSAssert引用的strong self。

解决方法:使用NSCAssert()代替NSAssert()

#define NSAssert(condition, desc, ...)  \
    do {                \
    __PRAGMA_PUSH_NO_EXTRA_ARG_WARNINGS \
    if (__builtin_expect(!(condition), 0)) {        \
            NSString *__assert_file__ = [NSString stringWithUTF8String:__FILE__]; \
            __assert_file__ = __assert_file__ ? __assert_file__ : @"<Unknown File>"; \
        [[NSAssertionHandler currentHandler] handleFailureInMethod:_cmd \
        object:self file:__assert_file__ \
            lineNumber:__LINE__ description:(desc), ##__VA_ARGS__]; \
    }               \
        __PRAGMA_POP_NO_EXTRA_ARG_WARNINGS \
    } while(0)
#endif

相关文章

  • IOS开发 日常踩坑记录

    Block 内部使用NSAssert导致的循环引用的问题

  • iOS开发 日常踩坑记录

    Xocde调试 Xcode在release的模式下,打印变量出现以下错误error: Couldn't mater...

  • iOS开发笔记

    原文请见github上iOS开发笔记 iOS开发笔记 记录了在iOS开发中踩过的坑和一些问题解决 微信的openi...

  • Flutter 开发记录

    Flutter 开发踩坑记录(干货总结)

  • iOS开发日常踩坑--UIWindow

    1.坑从何处来? 很多APP都有截屏分享的功能,在某个详情页按下截屏键,将当前页面绘制成UIImage,再贴...

  • 日常bug记录

    想记录日常碰到的bug,坑踩多了,以后应该碰到坑就比较容易处理或者会少踩坑,后面会慢慢记录bug,截图bug以及最...

  • Windows下GithubPages博客快速搭建

    Windows下开发坑总是比较多的,但是本人没Mac,只好踩一遍坑记录下。本文主要是安装过程&踩坑记录,故不对细节...

  • react-native native-echarts 趴坑指

    react-native 日常踩坑 下面我们探讨下native-echarts经常会踩到的坑 1、ios rele...

  • iOS 14小组件开发总结

     最近项目有开发iOS小组件的需求,开始调研到实现踩了很多坑,借此记录下来。 iOS14系统发布后,桌面添加的新的...

  • 移动web网页开发细节

    最近在做android和ios的webview开发,踩过不少坑,略有所获,记录一下 移动web中的兼容性问题,有时...

网友评论

      本文标题:IOS开发 日常踩坑记录

      本文链接:https://www.haomeiwen.com/subject/panmiftx.html