4

私はObjective-Cでブロックを使用し始めていますが、ブロックをインスタンス変数に割り当てる場合、ブロックを割り当てる必要があるのはなぜcopyですかassign

例えば:

typedef void (^MyBlock)();

@interface SomeClass : NSObject
{
    MyBlock myblock;
    // Other ivars
}

@property (nonatomic, copy) MyBlock myblock;  // Why must this be 'copy'???

//  other declarations

@end
4

3 に答える 3

9

さて、これを分析しましょう:

あるメソッド内にブロックを作成し、それをある変数に割り当てたとしましょう。

MyBlock block = ^{};

次に、それを次のプロパティに割り当てるだけですassign

self.myblock = block;

包含メソッドが戻ると、block変数はスコープ外になり、割り当てが解除されます。したがって、これを念頭に置いて、copyオブジェクトをブロックしてから、インスタンス変数に格納する必要があります。そうすれば、含まれているオブジェクトの存続期間中、ブロックを所有できます。

于 2011-01-12T02:28:05.817 に答える
4

ブロックがおかしいからです。

于 2011-01-12T02:28:14.977 に答える
0

wwdcビデオ「AdvancedObjective-CandGarbage Collection」には、ブロックに入り始めて内部のいくつかを説明したい場合に見る価値のある良い説明があります。そこには他にも素晴らしい話がいくつかあります。強くお勧めします。

于 2011-01-12T20:25:02.363 に答える