1

インスタンス化プロセスをよりよく理解しようとしています。NSMutableArrayなど、一部のクラスを使用する前に、それらを割り当てて初期化する必要があることを理解しています(クラスのオブジェクトを作成する必要があります)。ただし、NSDateやUIImageなど、使用する前にインスタンス化する必要のないクラスに遭遇しています。

たとえば、使用する前に、常に次のようにNSMutableArrayをインスタンス化しています。

NSMutableArray *myArray = [[NSMutableArray alloc]init];

UIImageを使用すると、インスタンス化をスキップしてこれを行うことができます。

UIImage *i = [UIImage imageNamed:@"image.png"];

インスタンス化せずにクラスを使用できる場合と、インスタンス化する必要がある場合のルールや標識はありますか?私はこれを知る簡単な方法があるかどうかを見ようとしています。

ありがとう!

4

2 に答える 2

1

一般に、私自身の経験則では、オブジェクトがそのメソッド内でのみライブになり、そのメソッドのスコープ外で使用されない場合、新しいオブジェクトをインスタンス化する前に自動解放されるオブジェクトの作成APIを使用します。

ただし、メソッドのスコープ外のどこかでオブジェクトにアクセスする必要がある場合は、オブジェクトをインスタンス化し、メモリを保持して保持する必要があります。

上記の例で、「UIImage * i」を取得して画像ビューにドロップするか、単一のメソッド内でのみ何かを実行する場合は、「imageNamed」が完全に適切です。

UIImage * iメソッドの範囲外で「」を保持する必要がある場合は、代わりに指定された初期化子を使用してください。

于 2013-03-22T05:28:17.217 に答える
1

どちらの場合でも、常にオブジェクトをインスタンス化しています。UIImageクラスがかなり醜いalloc / initプロセスを隠すいくつかの静的な便利なメソッドを提供しているだけです。NSMutableArray内部で「alloc」、「init」を実行するだけでなく、初期容量も[NSMutableArray arrayWithCapacity:numItems]設定します(パフォーマンス上の理由から)。最善の方法は、ドキュメントを熟読し、静的クラス メソッドを探すか、作成中のもので始まるメソッドがオートコンプリートにあるかどうかを確認することです[UIImage image...][NSDate date...]

于 2013-03-22T05:31:20.747 に答える