1

Appleのブロックプログラミングトピックから:ブロックと変数

Objective-Cオブジェクト
ブロックがコピーされると、ブロック内で使用されるオブジェクト変数への強力な参照が作成されます。

オブジェクトがNSObjectから拡張されていない場合はどうなりますか?それは関係がありますか?

例:

@property(nonatomic, copy) FooBlock fooBlock;

次は

-(void)foo:(NSObject<Foo>*)foo
{
    self.fooBlock = ^(){
        [foo bar];
    };
}

とは異なる

-(void)foo:(id<Foo>)foo
{
    self.fooBlock = ^(){
        [foo bar];
    };
}
4

1 に答える 1

2

ドキュメントには、 NSOjbect変数ではなく、オブジェクト変数が記載されていることに注意してください。すべての Objective-C オブジェクトは、基本クラスに関係なく、このコンテキストでは同じように扱われます。

他の人が指摘したように、オブジェクトが通常のメモリ管理セレクター、特に保持と解放に応答することを確認するだけで済みます。

これとは別に、NSObject 以外の基本クラスから派生させることは通常賢明ではないことに注意してください。可能ですが (NSProxy など)、非常に複雑になり、非常に速くなる可能性があります。そうする正当な理由があることを確認してください。

于 2012-11-30T15:06:33.937 に答える