① 为什么block 里面使用self,instruments leaks 没有检测出内存泄漏?
② 那么需要用什么方法才能检测出这里是出现了内存泄漏,因为一直都是网上这么说的,自己检测就不出来了。
下面事例代码:
#import "ViewController.h" typedef void(^myBlock)(NSString *); @interface ViewController () @property(nonatomic, copy) myBlock BlockName; @property (nonatomic, copy) NSString *name1; @property (nonatomic, copy) NSString *name2; @property (nonatomic, strong) NSMutableArray *students; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; /// 问:为什么instruments leaks 没有检测出内存泄漏? /// 那么需要用什么方法才能检测出这里是出现了内存泄漏,因为一直都是网上这么说的,自己检测就不出来了。 self.BlockName = ^(NSString *ken){ self.name1 = ken; self.name2 = ken; [self.students addObject:self.name1]; [self.students addObject:self.name2]; }; self.BlockName(@"apple"); } @end
在block使用self实际上是循环引用,也就是相对于ARC情况下两个对象之间进行了强引用,虽然彼此都没有释放内存,但是彼此都是被引用者。目前Xcode 8中使用runtime调试可以看到内存的关系图,可以通过关系图找到循环引用的两个对象。
一周热门 更多>