3

プロジェクトを ARC に変換しようとしています。このプロジェクトには、有向非巡回ワード グラフがあります。これは、基本的に、あらゆる場所に二重間接ポインターがたくさんあることを意味します。

これは ARC への変換が非常に困難であることを証明しており、特に 1 つの問題が現在私を困惑させています。

これがシナリオです。

あなたが持っているとしましょうNSString *

NSString *b = [[NSString alloc] initWithString:@"hello"];

二重間接型もあります。

__unsafe_unretained NSString **a;

次のように、一方を他方に割り当てます。

    a = &b;

これにより、変換エラーが発生します。

error: assigning 'NSString *__strong *' to 'NSString *__unsafe_unretained *' changes retain/release properties of pointer

に変更bしてもうまくいき__unsafe_unretainedません。また、さまざまなブリッジ キャストも試しました。ここで明らかな何かが欠けていますか?

何か案は?

ありがとう!

4

1 に答える 1

5

const ポインターへのポインターを使用して、メモリ管理の問題を回避できます。

__attribute__((objc_precise_lifetime)) NSString *b = [[NSString alloc] initWithString:@"hello"];
NSString *const*a;
a = &b;

コンテキスト全体で利用できるようにするには、objc_precise_lifetime を使用する必要がありbます (ARC はb最後の参照後に解放される場合があります) 。

編集:これも使用できます(ただし、ダブルポインターの管理に注意してください)

NSString *b = [[NSString alloc] initWithString:@"hello"];
NSString *__strong*a;
a = &b;
于 2012-03-06T11:32:17.430 に答える