【发布时间】:2023-03-27 11:47:01
【问题描述】:
__weak NSBlockOperation *secondBlockOperation = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"%@",secondBlockOperation);
NSLog(@"this is the second block");
}];
__block __weak NSBlockOperation *secondBlockOperation = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"%@",secondBlockOperation);
NSLog(@"this is the second block");
}];
__block NSBlockOperation *secondBlockOperation = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"%@",secondBlockOperation);
NSLog(@"this is the second block");
}];
这是我看不懂的代码。我发现 __block 会导致内存泄漏。所以我想到了 __block __weak 。好吧,根本没有泄漏。但是当我自定义一个类时将块作为强属性,像这样 __weak Person *one = nil; one = [[Person alloc] initWithBlock:^{ NSLog(@"%@",one); }]; 显示了弱分配警告。
说实话,我不明白当__block和__weak一起使用时的结果。__block值将是一个指向带有转发指针和值指针的结构的指针。所以weak是为指针工作的__block struct 或 __block struct 中的指针。为什么 __weak NSBlockOperation *secondBlockOperation 没有警告??!
【问题讨论】: