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のものは私の頭に浮かびます.OK,もうリークはまったくありません.しかし、ブロックでクラスをカスタマイズするとこの __weak Person *one = nil; のような強力なプロパティとして。one = [[Person alloc] initWithBlock:^{ NSLog(@"%@",one); }]; 弱い割り当て警告が表示されました。

正直、__block と __weak を併用した場合の結果がよくわかりません。__block の値は、フォワーディング ポインタと値のポインタを含む構造体へのポインタになります。そのため、__block 構造体へのポインタに対して、weak が機能するか、 __block構造体のポインターと、なぜ__weak NSBlockOperation *secondBlockOperationに警告がないのですか??!

4

1 に答える 1