0

私がこれをするとします:

MyClass *vista = [[MyClass alloc] initWithFrame:CGRectZero];

vista.onFinish = ^{
    CGRect rect = vista.bounds;
    // bla bla bla
};

次に、xcode はこのエラーを私に与えます: このブロックでビスタを強力にキャプチャすると、保持サイクルが発生する可能性があります

誰かが vista をこのように宣言することを提案しました

__unsafe_unretained MyClass *vista = [[MyClass alloc] initWithFrame:CGRectZero];

しかし、問題はこれです。vista 変数は数行下のプロパティに割り当てられます。

self.myVista = vista;

これは非原子的で強力なプロパティです。

どうすれば解決できますか?それを使用する一時的な id 変数を宣言できますが、これは不十分な解決策のようです。

何か考えはありますか?

4

1 に答える 1

2

これを試して:

MyClass *vista = [[MyClass alloc] initWithFrame:CGRectZero];

__weak MyClass *weakVista = vista;    
vista.onFinish = ^{
    CGRect rect = weakVista.bounds;
    // bla bla bla
};
于 2013-04-10T19:46:35.723 に答える