声明delegate为strong类型,简而言之,若是父VC持有子VC,并设置子VC的delegate为self(也就是父VC),这样的结果就是子VC也间接持有了父VC,形成循环引用,在Pop子VC的时候不会调用delloc。web
timer是否持有self,咱们通常要执行一个timer的时候会用(NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo 这里的aTarget通常是self,这时候就须要注意了,若是在你退出的时候这个timer还在执行的话因为这个timer会持有self,因此delloc也不会调用,这里能够用weakSelf代替self也是没有问题的。架构
最多见的就是block致使的循环引用,因为在重构APP中用到了MVVM架构,使用了大量的信号机制,致使block处处飞(哈哈),解决的最多的就是这种了,解决方法也很简单,就是在block外声明__weak type(self) weakSelf = self,在block中用weakSelf就能够了,还有就是在block中若是使用了成员变量的下划线形式也要改为weakSelf.PropertyName的形式。MVVM中定义了宏对@weakify(self)和@strongify(self)能够理解为__weak type(self) weakSelf = self的简化形式,能够拿来直接使用。函数
图片没释放,instrument调试后,发现没被释放的全是imageIO,差很少就知道了,把读图的方式,从[UIImage imageNamed:@""],改为imageWithContentsOfFile,就能够了。spa
使用GPUImage处理拍照的时候,内存稳定不明增加。是Xcode7.1的问题。。只在debug的时候致使内存崩溃,release的时候并不会形成内存溢出,因此能够没必要管它。debug
CoreFoundation对象(C对象) : 只要函数中包含了create\new\copy\retain等关键字, 那么这些方法产生的对象, 就必须在再也不使用的时候调用1次CFRelease或者其余release函数调试