>  Q&A  >  본문

ios - 为什么block 里面使用self,instruments leaks 没有检测出内存泄漏?需要用什么方法才能检测出

① 为什么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
PHP中文网PHP中文网2741일 전606

모든 응답(2)나는 대답할 것이다

  • 大家讲道理

    大家讲道理2017-04-18 09:46:06

    블록에서 self를 사용하는 것은 실제로 순환 참조입니다. 즉, ARC 상황에 비해 두 객체 사이에 강력한 참조가 있지만 둘 다 메모리를 해제하지는 않습니다. 현재 Xcode 8에서 런타임 디버깅을 사용하면 메모리 관계 다이어그램을 볼 수 있으며, 관계 다이어그램을 통해 순환적으로 참조되는 두 개체를 찾을 수 있습니다.

    회신하다
    0
  • 黄舟

    黄舟2017-04-18 09:46:06

    으아악

    회신하다
    0
  • 취소회신하다