① 为什么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
大家讲道理2017-04-18 09:46:06
在block使用self實際上是循環引用,也就是相對於ARC情況下兩個物件之間進行了強引用,雖然彼此都沒有釋放內存,但是彼此都是被引用者。目前Xcode 8中使用runtime調試可以看到記憶體的關係圖,可以透過關係圖找到循環引用的兩個物件。