Xcode 6にアップデートした後、多くの互換性のない変換割り当ての警告/エラーが表示され始めました
.hファイル内:
@property (nonatomic) BOOL *done;
.mファイル内:
@synthesize done;
- (id)init
{
if (self = [super init])
{
self.done = FALSE;
}
return self;
}
- (void) crashed {
self.done = TRUE; #this line gives an incompatible type conversion warning
}
これらの警告の多くは、アップグレード後に表示されました。誰かが同様の問題を共有していますか?これは局所的な問題ではなく、プロジェクト全体に広がっています。私の基礎のいくつかが間違っていると思いましたか、それともそれですか?
*
この言語の初心者が考えるように、ObjectiveCのすべての変数を文字で宣言する必要はありません。変数がオブジェクトへのポインタであることを示すのはCの遺産です。以下のようないくつかの基本的なタイプint
とは、BOOL
Cスタイルのプリミティブ型が使用されているので、オブジェクトに格納するオーバーヘッドを必要とするにはあまりにも簡単です。ドキュメントから:
スカラー型は、値を表すためにオブジェクトを使用することの利点(または関連するオーバーヘッド)が必要ない状況で使用されます。文字列は通常NSStringクラスのインスタンスとして表されますが、数値は多くの場合、スカラーローカル変数またはプロパティに格納されます。
BOOLは、Objective Cのプリミティブデータ型であり、ポインタではありません。警告は正しいです。次のように変数を宣言します。
@property (nonatomic) BOOL done;
*
変数名の横に文字がないことに注意してください。int
またはのような他のプリミティブ型float
も同様の方法で宣言する必要があります。
あなたのコードに関する他のいくつかのこと。BOOL値の正しいObjectiveC規則は、のYES
代わりにTRUE
、のNO
代わりにFALSE
あるので、それに固執する必要があります。また、Xcode 4.4以降、ここで説明@synthesize
するいくつかの特別なケース以外は必要ありません。コメントで指摘されているように、ドキュメントで説明されているように、ケースではなく使用することもお勧めします。instancetype
id
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加