3

performSelector:ARCを使用している場合、リークせずに次のメソッドを使用するにはどうすればよいですか?

- (SomeClass *)test {
    return [[SomeClass alloc] init];
}

次のようなものを使用すると、セレクターがプログラムで生成されるため、ARCが何をすべきかわからないため、リークが発生する可能性があるという警告が表示されます。

[object performSelector:selector];
4

1 に答える 1

2

この特定のケースでは、大丈夫です。この警告は、 が +0 オブジェクトを返すか +1 オブジェクトを返すかをコンパイラが判断できないことを示しており、コンパイラは-performSelector:+0 オブジェクトであると仮定して続行します。したがって、リークするかどうかは、実際に呼び出されるメソッドによって異なります。この場合、メソッドは-testであり、命名規則に従って +0 オブジェクトを返します。したがって、このメソッドを呼び出して-performSelector:もリークしません。

于 2012-12-13T03:25:58.467 に答える