1

ブロック内のコードがメソッドを呼び出す場合、そのメソッドが自分自身を参照する場合、保持サイクルは存在しますか? つまり、ブロックの下流のすべてのコードは、weakSelf/strongSelf パターンを使用する必要があるのでしょうか?

例えば:

__weak __typeof__(self) weakSelf = self;
Myblock block = ^{
    [weakSelf doSomething];
};

. . .

- (void)doSomething
{
    self.myProperty = 5; // Is this ok or does it need to use a weakSelf?
}
4

3 に答える 3

2

Objective-C は、あなたが示唆するように範囲が限定されていません。つまり、-doSomething 内から weakSelf にアクセスすることはできません。さらに、weakSelf で -doSomething を呼び出しているため、その呼び出し内の「自己」は実際には、weakSelf と同じオブジェクトを参照しています。

要するに、いいえ、すべきではありません。できないし、すべきではありません。

于 2015-02-21T21:14:24.770 に答える
0

これを行うと、保持サイクルの問題を取り除くことができます。

[self class] __weak *weakSelf = self;
self.completionBlock = ^{
    [self class] __strong *strongSelf = weakSelf
    [weakSelf doSomething];
};
于 2015-03-04T14:21:32.143 に答える