3

アプリの最終的な修正を行っており、すべてのコンパイラ/アナライザーの警告を取り除いています。

Core Data エンティティへのアプリ アクセスをラップするクラス メソッドが多数あります。これはアナライザーを「挑発」しています。

+ (CDProductEntity*) newProductEntity {

    return (CDProductEntity*)[NSEntityDescription insertNewObjectForEntityForName:@"CDProductEntity" inManagedObjectContext:[self context]];
}

これにより、Analyzer の警告が表示されます。

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

上記のクラスメソッドを呼び出すメソッドには、次のものがあります。

CDProductEntity *newEntity = [self newProductEntity];

これにより、Analyzer の警告が表示されます。

メソッドは、+1 保持カウント (所有参照) を持つ Objective-C オブジェクトを返します。

コア データ エンティティを明示的に解放または自動解放することは通常非常に悪いことですが、それは私に求められていることですか? 最初に、保持カウントが +0 であり、これは悪いことであることがわかります。次に、+1 であることも悪いことであることがわかります。

Analyzer の問題に対処していること、または正しくリリースしていることを確認するにはどうすればよいですか?

前もって感謝します

4

1 に答える 1

6

静的アナライザーが不平を言う問題は、メソッド名にある可能性があります-obj-c命名規則に従って、名前にalloc、new、またはcopyを含むメソッドは、呼び出し元が「所有」し、解放する必要があるオブジェクトを返すことが期待されます-メソッドは自動解放されたオブジェクトを返します。

ドキュメントからの引用:

作成したオブジェクトはすべてあなたが所有します。
名前が「alloc」または「new」で始まるか、または「copy」を含むメソッド (たとえば、alloc、newObject、または mutableCopy) を使用して、オブジェクトを「作成」します。

まず、メソッド名から「new」を削除することをお勧めします

于 2011-01-04T13:51:56.307 に答える