2012-05-05 17 views
0

彼らは、Xcodeの4でいくつかのことを変更し、私はNSSetを初期化する必要がありますか?

NSMutableSet *variablesUsed = [NSMutableSet set]; 

または

NSMutableSet *variablesUsed; 

十分であることにより、NSSetを初期化するために必要な場合、私は不思議でしたか?または、2番目のオプションはnilに初期化されますか?それは空のセットと同じですか?

ありがとうございました!

答えて

3

NSMutableSet *variablesUsed;を使用すると、nilに設定されているポインタが得られますので、どのような種類のセットも指していません。 nilは、何も設定されておらず、空のセットと同じではないことを意味します。 nilの機能を使用できないようにするため、variablesUsedを設定して "real"に設定する必要があります。

NSMutableSet *variablesUsed = [NSMutableSet set];またはNSMutableSet *variablesUsed = [[NSMutableSet alloc] init];を使用する場合は、初期化されて使用可能な新しい空のセットにポインタを設定しています。

+0

[NSMutableSet set]と[[NSMutableSet alloc] init]の間に違いはありますか?それとも彼らはまったく同じことをしていますか? – Jack

+0

あなたがARCを使っているのならば、それは同じことです。 ARCを使用していない場合は、この質問を参照してください:http://stackoverflow.com/q/8211075/937822 – lnafziger

+2

[NSMutableSet set]はautoreleaseオブジェクトと[[NSMutableSet alloc] init]保持オブジェクトです(これを解放する必要があります)。 –

0

ランタイムの最新バージョンでは、後者はnilに初期化されます。古いバージョンでは結果は未定義であり、通常はそれをnilに代入するか、それを指すオブジェクトを与えるのがベストプラクティスです。

ご使用の場合は、使用する前に初期化する必要があります。

関連する問題