前言: 话说昨晚还是前晚,写了一篇:讲述Sagit.Framework解决:双向引用导致的IOS内存泄漏(上) 文章写到最后时,多了很多莫名奇妙的问题!!! 为了解决了这些莫名奇妙的问题,我又战斗了24小时〜〜〜 然后终于解决了问题,原来是IOS的隐藏性Bug,只想恨恨的说一声fuck~~~ 故事起源: 故事是这样的,为了处理内存释放的问题,正常人的思维,都是给对象的dealloc增加日志输出. 于是,UIView.UIViewController和两个Sagit定义的基类STView.STCo…
前言: 在处理完框架内存泄漏的问题后,见上篇:讲述Sagit.Framework解决:双向引用导致的IOS内存泄漏(中)- IOS不为人知的Bug 发现业务代码有一个地方的内存没释放,原因很也简单: 在block里用到了self,造成双向引用,然后就开始思考怎么处理这个问题. 常规则思维,就是改代码,block不要用到self,或只用self的弱引用. 只是框架这里特别,有一个特好用的系列,STLastXXX系列,是用宏定义的,而且该宏指向了self. 这么好用的STLastXXXX宏定义系列,…
例如: @interface Test:NSObject{ id __strong obj_; } -(void) setObject:(id __strong)obj; @end @implementation Test -(id)init{ self=[super init]; if(self){} return; } -(void) setObject:(id __strong) obj{ obj_=obj; } @end 那么在调用时如下: { 1.  id text1=[[Test a…
首先定义一个Person类和一个Dog类,然后分别实例化对象p和d,给p对象添加一个pet属性 给d对象添加一个master属性此时Person和Dog的应用计数都为2,当del p 和del d后Person 和Dog的应用计数都为1,就造成了循环引用导致内存不能释放 最终导致内存泄漏. 以下图片是没有循环应用的代码执行结果 以下图片是循环引用后代码执行结果…
前言: 好久没写文章了,最近先是重构IT恋.又重写IT恋中. Sagit框架也不断的更新,调整,现在感觉已完美了了相当的多. 今天不写教程,先简单分享一下技术内容. 1:见Block必有:#define WeakSelf __weak typeof(self) this = self; 故事要从这这里说起: 当初番完这代码后,发现到处都有这个鬼东西,然后就去百度了一下,然后大意是为了: 解决双向引用导致的内存无法释放问题 简单的表述如下: self 强引用指向=>block: block 也强引…
原始问题是这样 然后扔到了很多Android开发交流群里. 接着产生了很多的见解,我感觉比较靠谱的有以下: 网友对我问题的回答 1.onDestroy被回调代不代表Activity被回收了? 官方是这么说的 Perform any final cleanup [before] an activity is destroyed. x   1 Perform any final cleanup [before] an activity is destroyed. 众多网友:不代表! 网友1:代表[将…
https://github.com/bboyfeiyu/android-tech-frontier/tree/master/issue-7/%E5%9C%A8Activity%E4%B8%AD%E4%BD%BF%E7%94%A8Thread%E5%AF%BC%E8%87%B4%E7%9A%84%E5%86%85%E5%AD%98%E6%B3%84%E6%BC%8F 已测试 在Activity中使用Thread导致的内存泄漏 原文链接 : Activitys, Threads, & Memory…
在ARC(自动引用技术)前,Objective-c都是手动来分配释放 释放 计数内存,其过程非常复杂. ARC技术推出后,貌似世界和平了很多,但是其实ARC并不等同于Java或者C#中的垃圾回收,ARC计数只是在XCode在编译的时候自动帮我们加上了释放 计数+1 计数-1. 内存泄露例子: 然而在一些特殊的情况下,内存泄露依然存在,而且防不慎防,这里讲一下Objective-C中Block计数是如何产生内存泄露的,如下代码 .h中 typedef void (^CompletionBlock)…
vue的自定义指令是一个比较容易引起内存泄漏的地方,原因就在于指令通常给元素绑定了事件,但是如果忘记了解绑,就会产生内存泄漏的问题. 看下面代码: directives: { scroll: { inserted (el, cb) { // 不是元素节点 || 未设置回调函数 if (el.nodeType !== 1 || !cb) return let direct = 'down' let rollHeight = 0 let getScrollEventTarget = (target)…
Last week I’ve mentioned on Twitter that we ran into wrong result bug. We found workaround quickly but I’ve decided to spend some time to reproduce error and write blog post to warn you about this optimizer behavior. Special thanks to my colleague wh…