追加: 関数内のブロックをコピーすると問題が発生: [ブロック コピー]
私はすでに自己保持を避けるために __block を使用しています。__block typeof(self) bself = self;
ただし、このブロックに別のブロックがあり、それが bself を使用している場合、self は保持されます。
以下のコードに示すように、最初の bself は想定どおりに self を保持しません。ただし、2番目の自己は自己を保持します。
__block typeof(self) bself = self;
[layer start:param1
completeHanlder:^{
bself.xx = localxx;
dispatch_async(dispatch_get_main_queue(), ^(void) {
... ...
[bself something];
});
}
];
背後にある理由を知っている人はいますか?