当我将NSBlockOperation对象分配给弱值时,没有警告的原因是什么

时间:2016-04-01 08:16:06

标签: ios warnings block weak

__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会进入我的脑海。OK,根本就没有泄漏。但是当我自定义一个类时像块这样强大的财产      __weak Person * one = nil;          one = [[Person alloc] initWithBlock:^ {           的NSLog(@"%@"一种);       }]; 弱分配警告显示。

老实说,当__block和__weak一起使用时,我不理解结果.__块值将是指向带有转发指针和值指针的结构的指针。因此,弱指针适用于指针到__block结构或__block结构中的指针。为什么__weak NSBlockOperation * secondBlockOperation没有警告??!

1 个答案:

答案 0 :(得分:-1)

所有区块操作通常都应该很弱。因为,如果块操作完成,则不需要将此块对象保留在内存中。 正如苹果文档(https://developer.apple.com/library/ios/documentation/Cocoa/Reference/NSOperation_class/index.html#//apple_ref/occ/cl/NSOperation)中所写的那样:

操作对象是单击对象 - 也就是说,它执行一次任务,不能用于再次执行