0

私はARCを有効にして(アプリストアではなく)配布したアプリ(私の最初のアプリ)を作成し、一部のMacでクラッシュしたというレポートを受け取り始めました。彼らの助けを借りて試してみたところ、問題は彼らが32ビットプロセッサを持っていることにあることがわかりました。だから私はARCを無効にし、ビルドをx86_64に設定し、大量のエラーメッセージを受け取りました。

それらはすべてソートされており、今では大量の警告 (黄色のもの) が残っています。何かを忘れて記憶がごちゃごちゃになってしまうのではないかと心配です。何かを忘れずに 64 ビット アプリから 32/64 ビット アプリに移行するための最良の方法は何だと思いますか? ARC に対応していない Mac が多いのに、なぜ ARC を最初に使用するのですか?

ありがとう!

- - -アップデート - - -

要求されたとおり:

 Update to recommended settings

 Property 'delegate' requires method 'delegate' to be defined - use @synthesize, @dynamic or provide a method implementation in this class implementation

 Property 'delegate' requires method 'setDelegate:' to be defined - use @synthesize, @dynamic or provide a method implementation in this class implementation

 '__bridge' casts have no effect when not using ARC

 Variable 'loc_tip' is used uninitialized whenever 'if' condition is false

 Variable 'loc_tip' is used uninitialized whenever '&&' condition is false

 Conflicting parameter types in implementation of 'tableView:toolTipForCell:rect:tableColumn:row:mouseLocation:': 'NSInteger' (aka 'int') vs 'long'
4

1 に答える 1

2

ラフ・ウォーター・アヘッド

それらはすべてソートされており、今では大量の警告 (黄色のもの) が残っています。

警告レベルを上げてください。それらをすべて修正します。

何かを忘れて記憶がごちゃごちゃになってしまうのではないかと心配です。

何かを忘れずに 64 ビット アプリから 32/64 ビット アプリに移行するための最良の方法は何だと思いますか?

問題を考えると、心配するのは自然なことです。

簡単な修正方法の 1 つは、ガベージ コレクションを有効にして ObjC を使用することです。そうすることで、余分な変更を加えなくても機能すると信じるのは間違いです (テストとバグハンティングのために多くの時間を確保する必要があります)。

もう 1 つのアプローチは、32 ビットと 64 ビットの両方で本当に優れたサポートが必要な場合は、MRC を使用することですが、その場合は 32 ビットと 64 ビットの両方で MRC にコミットする必要があります (ARC なし)。もちろん、これには多くのレビュー、修正、手動テスト、およびリークのテストが必要になります (プログラムが小さい場合を除きます)。これは、優れた長期サポートと高い品質基準 (IMO) を備えたアプリに適したソリューションです。

ARC に対応していない Mac が多いのに、なぜ ARC を最初に使用するのですか?

実際、32 ビットを必要とする Macはそれほど多くありません。今日 1.0 をリリースする場合は、64 ビットのみにすることを検討する必要があります。

32 ビットが必要な場合は、開発の最初からサポートおよびテストする必要がありました。ARC オプションまたは 32 ビットは非常に早い段階で削除されていたはずです。この見落としがテストと開発をすり抜けてしまうのは奇妙に思えます。

推奨設定への更新

「設定の検証」を押して確認し、変更を実行します。

プロパティ 'delegate' には、メソッド 'delegate' を定義する必要があります - @synthesize、@dynamic を使用するか、このクラスの実装でメソッドの実装を提供してください

エコー警告メッセージ

プロパティ 'delegate' には、メソッド 'setDelegate:' を定義する必要があります - @synthesize、@dynamic を使用するか、このクラスの実装でメソッドの実装を提供してください

エコー警告メッセージ

ARC を使用しない場合、'__bridge' キャストは効果がありません

その場合は、c スタイルのキャストを使用するだけです

'if' 条件が false の場合は常に、変数 'loc_tip' が初期化されずに使用されます

ARC がこれを行います。ARCが行うことを行うだけです:

NSSomething * loc_tip = nil;

'&&' 条件が false の場合は常に、変数 'loc_tip' が初期化されずに使用されます

前の応答をエコー

'tableView:toolTipForCell:rect:tableColumn:row:mouseLocation:': 'NSInteger' (別名 'int') と 'long' の実装で競合するパラメーターの型

セレクターの宣言が一致しません -- 宣言をヘッダー ( NSTableView.h) からコピーし、(パラメーターの型の) その変更によって実装に他の変更が必要かどうかを確認してください。

于 2013-03-07T19:03:05.907 に答える