1

.m を分析しようとすると、奇妙な警告が表示されます。

警告: +1 (所有) 保持カウントが予期される呼び出し元に +0 保持カウントを持つオブジェクトが返されました

ライン上

return [NSNumber numberWithInt:1];

コードは次のとおりです。

- (NSNumber*)index
{
  return [NSNumber numberWithInt:1];
}

文字列を持つ同様のコードは正しく渡されます。

- (NSString*)ss
{
    return [NSString stringWithFormat:@"%d", 1];
}

NSNumber コンストラクターで何かを見逃していましたか、それとも Analyser のバグですか?

4

2 に答える 2

1

どちらの場合も自動解放されたオブジェクトが返されるため、これはアナライザーのバグのようです。

@次のように、新しい構文を使用してコードを簡素化できることに注意してください。

- (NSNumber*)index
{
  return @1;
}

次のように式を返す必要がある場合は、括弧が必要です。

- (NSNumber*)index
{
  return @(value1 + value2); // Same as [NSNumber numberWithInt:value1 + value2];
}
于 2013-11-02T19:28:13.013 に答える
1

Objective-C メソッドでは、名前付けはメモリ管理を決定する上で重要です。

alloc名前が, new,copyまたはで始まるメソッドmutableCopyは +1 の保持カウントを持つオブジェクトを返すことが期待されますが、それ以外はすべて自動解放されたオブジェクト、つまり +0 の保持カウントを持つオブジェクトを返す必要があります

これを念頭に置いて、メソッドに実際に名前が付けられているindex場合、アナライザーは間違っています。


補足として、Objective-C リテラルを利用して作成を簡単にすることができますNSNumber

[NSNumber numberWithInt:1]

で置き換えることができます

@1

[NSNumber numberWithInt:anExpression];

で置き換えることができます

@(anExpression)
于 2013-11-02T19:34:37.123 に答える