针对内存泄露-开发容易被忽略的例子-by:西瓜
2018-06-07 本文已影响145人
不够果断是种癌
楼主最近发现了一个问题,就是在使用block的时候。只要使用到了对象就会报错一个错误"Block implicitly retains 'self'; explicitly mention 'self' to indicate this is intended behavior Insert 'self->"。网上也查阅了很多资料,最开始楼主也是用的网上解决方法,看似解决了问题,然而并没有解决。最近楼主感觉有点问题,然后做了测试,才发现网上的解决方法是错的,正确的解决方法楼主会写这篇文章里面。
针对网上这个现象,楼主在此调侃一下,有些人看文章看博客,只要觉得对方好,就直接开启CV模式,不管自己有没有看懂。这样也就导致现在的一个现象,去百度的时候,网上有时候错误答案一堆,并且还描述一模一样。回答的也一模一样。可笑。这些很显然就是CV模式的人。
楼主想说一句,要想解决bug,最好的方法是实际定位到错误的原因,并经过测试,而不是只想一想就好了,要对自己说出的话负责。
楼主在这里举个例子:
很多人不已为然,直接点了Fix,于是变成下方这样:
很多人都以为这样就解决问题了,没有警告了。又或者这样写,好像也没有警告哦,好像也没有报错哦:
但是毫无疑问是错的,这样写虽然没有问题,但是实际上已经造成了循环引用。已经相互持有了。大家也可以仔细分析分析自己写一个测试。就知道答案了。
正确的做法是进行弱引用:
做法一:
做法二:
针对循环引用 可以使用:FBMemoryProfiler 来进行检测。