1

私は約8か月前にプログラミングを学び始め、C、OOPから始め、現在はiOSに移行しています。これが私の目標です。ほとんどの部分ですべてが非常にスムーズに進んでおり、xcodeで小さなアプリケーションをプログラミングすることから練習を始めました。時々私を失望させるのは、便利な初期化子のようなほんの少しの用語です。誰かが私のためにこの用語を定義して、その使用法の簡単な例を教えてもらえますか?割り当てと初期化の概念は理解していますが、初期化子と便利な初期化子を区別できません。私はオンラインで調べましたが、あまり運がありません。

どんな助けでもありがたいです、ありがとう

4

2 に答える 2

3

基本的に、便利な初期化子/コンストラクターは、クラスのインスタンスを返すクラス (静的/非メンバー) メソッドです。

これは、クラスの実際のインスタンスを取得するために、オブジェクトを明示的に割り当てるのではなく、便利なコンストラクター (または初期化子) が提供されている場合はそれを使用できることを意味します。

alloc標準の/ init(またはinitWith...)の方法を置き換えます。

しかし...

メモリ管理に関しては、まったく異なる意味を持ちます。

便利なコンストラクターによって返されるオブジェクトを所有していません。
つまり、自分で解放する必要はありません。

たとえば、次のように割り当てる場合NSMutableArray:

NSMutableArray * a = [ [ NSMutableArray alloc ] initWithCapacity: 10 ];

alloc を呼び出しました。これは、オブジェクトを所有しているため、オブジェクトを解放する必要があることを意味します。

NSMutableArray * a = [ [ NSMutableArray alloc ] initWithCapacity: 10 ];

/* Some stuff here... */

[ a release ];

オブジェクトは自動的に解放されるため、便利なコンストラクターには当てはまりません (現在の自動解放プールに自動的に配置されます)。

NSMutableArray * a = [ NSMutableArray arrayWithCapacity: 10 ];

/* Some stuff here... */
/* No need to release the array! */

基本的に、これがarrayWithCapacity便利なコンストラクターのNSMutableArray機能です。

+ ( NSMutableArray * )arrayWithCapacity: ( NSUInteger )capacity
{
    return [ [ [ NSMutableArray alloc ] initWithCapacity: capacity ] autorelease ];
}

最後のautoreleaseへの呼び出しに注意してください。
これは、オブジェクトが現在の実行ループの最後に自動的に解放されることを意味するため、自分で行う必要はありません (もちろん、明示的に保持しない場合)。

最後の注意事項

ARCを使用しているかどうかについては言及していません。
そうではないと仮定しました。

もちろん、ARCを使用する場合、変数修飾子 (強い/弱い) に基づいて保持/解放が (ほとんどの場合) 自動的に行われるため、これはまったく異なります。

ただし、 ARCを使用している場合でも、参照カウントがどのように機能するかを知っておく必要があります。

于 2012-05-21T22:03:51.543 に答える
0

私は同じ疑問を持っていましたが、今は解決しました: https://developer.apple.com/library/ios/documentation/general/conceptual/devpedia-cocoacore/MultipleInitializers.html

注: 上記のリンクが失敗した場合は、次のバックアップをお読みください: https://gist.github.com/JeOam/9116926

于 2014-02-20T15:11:39.093 に答える