Xcode 4 の静的アナライザーは、そうでないように思われる場合に、このメソッドに過度に解放された戻り値があるというフラグを立てます。
- (id)copyWithZone:(NSZone *)zone
{
return [[[self class] allocWithZone:zone] initWithURL:self.url postString:self.postString];
}
return キーワードからそれに続く式を指す矢印と、その式からアナライザーの警告を指す矢印があります。静的分析は次のとおりです。
- メソッドは、保持カウントが +1 の Objective-C オブジェクトを返します
- 送信されたオブジェクト - autorelease メッセージ
- 所有参照として呼び出し元に返されるオブジェクト (呼び出し元に転送される単一の保持カウント)
- +0 (非所有) 保持カウントで呼び出し元に返されたオブジェクト
- +1 (所有) 保持カウントが予期される呼び出し元に返される +0 保持カウントを持つオブジェクト
静的アナライザーが間違っていますか、それともこのコードに何か問題がありますか?
リクエストにより、-initWithURL:postString:
メソッド:
- (id)initWithURL:(NSURL *)u postString:(NSString *)p
{
if ( (self = [super init]) )
{
self.url = u;
self.postString = p;
}
return self;
}
プロジェクトをクリーニングして再構築した後でも、この警告が表示され続けます。
更新: Xcode 4.2 にアップグレードした後、Xcode 静的アナライザーはこれを問題としてフラグ付けしなくなりました。