0
__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 值将是一个指向带有转发指针和值指针的结构的指针。所以弱用于指向 __block 结构的指针或__block 结构中的指针。为什么 __weak NSBlockOperation *secondBlockOperation 没有警告??!

4

1 回答 1

-1

所有块操作通常应该是弱的。因为,如果块操作完成了,就没有必要把这个块对象保存在内存中了。正如苹果文档中所写(https://developer.apple.com/library/ios/documentation/Cocoa/Reference/NSOperation_class/index.html#//apple_ref/occ/cl/NSOperation):

一个操作对象是一个单次对象——也就是说,它执行一次它的任务,不能用来再次执行它

于 2016-04-01T08:39:20.513 回答