問題タブ [objective-c-literals]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
objective-c - @"" NSNumber の文字列型リテラル
Objective C での文字列リテラルの省略形の@"string"
表記法が気に入っています。sで同様の動作を得る方法はありますNSNumber
か? 私はもっと番号を扱うので、[NSNumber numberWithWhatever:]
どこにでも電話をかけるのはとても面倒です。マクロを作成しても機能しますが、それを行う最善の方法についての私の知識は限られています。
objective-c - Xcode 4.4 のリリース ノートに記載されている「Objective-C リテラル」の詳細は何ですか?
Xcode 4.4 のリリース ノートを読んでいて、次のことに気付きました。
LLVM 4.0 コンパイラ
Xcode には、次の新しいObjective-C 言語機能を含む、Apple LLVM Compiler バージョン 4.0 が含まれるようになりました: [...]
- Objective-C リテラル: NSArray、NSDictionary、および NSNumber のリテラルを作成します。
この機能に興味があります。リテラルがどのように機能し、 、、およびNSString
でどのように使用できるかは、私には完全には明らかではありません。NSArray
NSDictionary
NSNumber
詳細は?
objective-c - Objective-Cにはリテラル辞書または配列構文がありますか?
次のような vararg メソッド呼び出しを使用して、NSArray (および NSDictionaries/NSNumber) を作成することは常に可能でした。
これらは、LLVM と Clang の新しい改善でインライン リテラルを使用して作成できますか?
objective-c - 新しい Clang Objective-C リテラルをカスタム クラスにリダイレクトできますか?
のオーバーロードは@
危険な領域に足を踏み入れ始めていますが、Clang 3.1 での新しい Objective-C リテラルの追加が気に入っています。残念ながら、新しいリテラルは私にはあまり役に立ちません。コードが AppKit とやり取りする必要がある場合を除いて、私は独自のカスタム フレームワークを優先して Foundation クラスの使用をほとんどやめました (さまざまな理由で、そのほとんどは、使用されるメモリ割り当てパターンを直接制御する必要があるためです)。オブジェクトによって)。
新しく作成されたオブジェクトをカスタム クラスとして渡すために、いつでもランタイムのトリックを使用できます (これは、Apple 以外の GCC ランタイムのみが-fconstantstring=class
フラグをサポートするため、文字列オブジェクト リテラルで既に行う必要があることです) が、これはハックです。せいぜい、最初から同等の Foundation クラスを置き換えることによって得たすべての利点を捨ててしまいます。
文字列オブジェクト リテラルとは異なり、Clang が実装する新しいリテラルは実際には定数クラスではありません (メモリ レイアウトがハードコーディングされている場合)。代わりに、適切なメッセージがそれぞれのクラスに送信され、実行時に新しいオブジェクトが作成および初期化されます。オブジェクトを自分で作成した場合と結果は変わりません。理論的には、使用されるクラスと新しいリテラルによって呼び出されるメソッドがハードコードされていないことを意味します。実際には、私自身のカスタム クラスとメソッドを指すようにそれらを変更する方法を見つけることができません (実際には、カスタム クラスを指すだけで十分です。実行時にダミー メソッドを実際のメソッドに指すことは難しくありません)。 )。
これを最初に調べたとき、私が求めていることを行うために使用できるフラグのセットを見つけることを本当に望んでいましたが、何も見つからなかったので、誰かが解決策を持っていることを願っています.
objective-c - NSArrayで添え字を使用すると、コンパイラエラー「予期されるメソッドが見つかりません」
NSArray
sの新しいObjective-Cリテラル構文を試すために、この単純なコードを作成しました。
最初の行は正常に機能しますが、添え字を付けるとエラーが発生します。
タイプ'NSArray*'のオブジェクトに見つからない配列要素を読み取るために必要なメソッド
私が何か間違ったことをしたのか、それともリテラルがまだ完全に実装されていないのか疑問に思っています。Apple LLVM 4.0でコンパイルし、iOS5SDKを使用しています。
これもエラーのスクリーンショットです。
objective-c - リテラルオブジェクトの構文はOSX開発でのみ使用できますか?
新しいObjective-Cリテラル構文の追加(例@3.14
)は、iOSではなくOS X用に開発する場合にのみ利用できますか?それがXcodeアップデート4.4が示唆しているようです。もしそうなら、なぜですか?
objective-c - Xcode 4.4できちんとしたObjective-Cリテラルインデックス機能を取得する方法はありますか?
新しいObjective-Cリテラルについてすべて読み、Xcodeを使用して古いコードを変換しましたが、インデックスコードは変更されませんでした。手作業で変更しましたが、コンパイルされませんでした。iOS 6まで待たなければならないという投稿を見ましたが、今すぐインデックスを作成したいです!
解決策はありますか?
objective-c - @YES では「期待される式」エラーが発生するのに、@(YES) ではコンパイルされるのはなぜですか?
XCode 4.4 の Convert to Modern Objective C Syntax を使用すると、私の[NSNumber numberWithBool:YES]
呼び出しは に変換されました@(YES)
。私は今忘れてしまったいくつかの問題を抱えており、それらを自分で に変更しました@YES
。これは正しい構文であるはずです。
ただし、そうするとエラーが発生します。
予期しない型名 'BOOL': 予期される式
@YES
「式」構文があることは知っていますが、単にand を使用できない理由がわかりません@NO
。
@(YES)
コンパイルしないのにコンパイルするのはなぜ@YES
ですか?それを修正するにはどうすればよいですか?
objective-c - @[obj1, obj2] はどのようなオブジェクトを作成しますか?
私は以下に出くわしました:
を作成しているようですNSArray
が、この配列インスタンスは自動解放されたオブジェクトですか、それとも解放する必要がありますか?
objective-c - 同じ列挙型メンバーをボックス化すると、メソッドに渡されるときに、より大きな整数が生成されます
Clangのプリミティブボクシング機能を使用して列挙型メンバーをにパックしていますNSNumber
これに関するClangドキュメントのBoxedEnumsセクションでは、型が指定されていない限り、コンパイラーは列挙型メンバーを整数にボックス化すると述べています。
おかしなことに、列挙型メンバーをメソッドに渡す方法に応じて、さまざまなサイズの整数を取得します。私は次のコードにケースを分離することができました
コンソール出力は
AのCF番号タイプ:3; B:4
(最初のものはkCFNumberSInt32Type
、2番目のものはですkCFNumberSInt64Type
)
宣言をに変更するtypedef enum _MyEnum : int
と、両方で同じ結果が表示されますkCFNumberSInt32Type
。
ボクシングの2つの方法で整数のサイズが異なるのはなぜですか?