私はObjective-Cが初めてです。私は C と C++ を知っていますが、Objective-C にはかなりの学習曲線があります。とにかく、次のように書くためのより短い方法はありますか(おそらく何らかの NSNumber リテラルが存在する場合)。
[Tyler setArms:[[[NSNumber alloc] autorelease] initWithInt:1]];
私はObjective-Cが初めてです。私は C と C++ を知っていますが、Objective-C にはかなりの学習曲線があります。とにかく、次のように書くためのより短い方法はありますか(おそらく何らかの NSNumber リテラルが存在する場合)。
[Tyler setArms:[[[NSNumber alloc] autorelease] initWithInt:1]];
Clang v3.1の時点で、Objective-C リテラルを使用できるようになりました。
NSNumber *fortyTwo = @42; // equivalent to [NSNumber numberWithInt:42]
NSNumber *fortyTwoUnsigned = @42U; // equivalent to [NSNumber numberWithUnsignedInt:42U]
NSNumber *fortyTwoLong = @42L; // equivalent to [NSNumber numberWithLong:42L]
NSNumber *fortyTwoLongLong = @42LL; // equivalent to [NSNumber numberWithLongLong:42LL]
だから、あなたの特定の質問に答える:
[Tyler setArms:[[[NSNumber alloc] autorelease] initWithInt:1]];
次のように記述できるようになりました。
[Tyler setArms:@1];
配列と辞書のリテラルもありますが、この質問の範囲外です。
Xcode でリテラルを利用するには、少なくともバージョン 4.4 が必要です (執筆時点ではプレビューのみです)。
注: LLVM はオープン ソース プロジェクトであるため、Apple の NDA の対象にはなりません。
はい、次のような多くのヘルパー関数のいずれかを使用してnumberWithInt:
ください。
[Tyler setArms:[NSNumber numberWithInt:1]];
式[NSNumber numberWithInt:1]
は と同等で[[[NSNumber alloc] initWithInt:1] autorelease]
、これは と同等[[[NSNumber alloc] autorelease] initWithInt:1]
です。後者の表現は非常にまれです。
割り当てて初期化する必要はありません。NSNumber
それを行うための便利なメソッドを提供します。
[Tyler setArms:[NSNumber numberWithInt:1]];
Xcode 4.4 では、NSNumber リテラルが追加されました。
// integral literals.
NSNumber *fortyTwo = @42; // equivalent to [NSNumber numberWithInt:42]
NSNumber *fortyTwoUnsigned = @42U; // equivalent to [NSNumber numberWithUnsignedInt:42U]
NSNumber *fortyTwoLong = @42L; // equivalent to [NSNumber numberWithLong:42L]
NSNumber *fortyTwoLongLong = @42LL; // equivalent to [NSNumber numberWithLongLong:42LL]
// floating point literals.
NSNumber *piFloat = @3.141592654F; // equivalent to [NSNumber numberWithFloat:3.141592654F]
NSNumber *piDouble = @3.1415926535; // equivalent to [NSNumber numberWithDouble:3.1415926535]
// BOOL literals.
NSNumber *yesNumber = @YES; // equivalent to [NSNumber numberWithBool:YES]
NSNumber *noNumber = @NO; // equivalent to [NSNumber numberWithBool:NO]
これまでに見た中で最も優れたドキュメントはllvm man pageにあります。
前の回答に加えて 2 つの点があり、どちらも正しいです。
まず、Cocoa の命名規則に従うと、サポートが容易になります。オブジェクト ポインターを含む変数は、小文字で開始する必要があります。つまり、「タイラー」ではなく「タイラー」です。クラスと型は大文字で始まります。
第二に、オブジェクトを初期化する前に自動解放することはありません。常に最初に確保し、次に初期化してから、解放や自動解放など、必要なことをすべて実行してください。