① 为什么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];优艾设计网_PS交流/// 问:为什么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
rmzRUZXE 2022-08-19 09:16
在block使用self实际上是循环引用,也就是相对于ARC情况下两个对象之间进行了强引用,虽然彼此都没有释放内存,但是彼此都是被优艾设计网_设计圈引用者。目前Xcode 8中使用runtime调试可以看到内存的关系图,可以通过关系图找到循环引用的两个对象。
精彩评论