8

X コードで、自動参照カウント (ARC) を使用して新しいプロジェクトを作成し、既存の非 ARC プロジェクトを [ファイル] --> [ファイルを追加] で追加すると (ワークスペースへの追加と見なされますか?ワークスペースの用語がわからない)、それはうまくいくでしょうか?このプロジェクトで私が書く新しいコードは ARC コードになるのでしょうか?

この方法でプロジェクトを追加すると、ファイルは「コンパイル済みソース」にリストされません。したがって、「-fno-objc-arc」を設定するものは何もありません。

MapBox-ios-example がこれを行っているように見えることに気付きました。追加するだけで、何も考えませんか?

別の質問は、ARC プロジェクトにリンクしている非 ARC 静的ライブラリ (.a) の場合はどうなるかということです。非 ARC ライブラリのクラスで何か特別なことをする必要はありますか?

編集: こんにちは、応答が遅くなって申し訳ありません。

私の 2 番目の質問には、ほぼ全員がかなり良い回答をしてくれました。ありがとうございました。nverinaud がその質問に最初に答えたので、私は彼の功績を認めることを学んでいます。(賞金を授与するのに時間制限があるようです?答えが残っている場合は、nverinaudにクレジットを与えたいと思います。)

しかし、最初の質問にはまだ疑問があります。Mapbox の例と手順に従って、ARC 以外の「プロジェクト ファイル」自体を現在の ARC プロジェクトに追加しています。ソース ファイル (.m .c) を個別にプロジェクトに追加するのではなく、プロジェクト ファイルを追加していることを強調しておく必要があります。.m と .c は、別のフォルダー内の別のプロジェクトにあるようです。そして、この Mapbox プロジェクトには [view release] のような呼び出しがあり、警告が存在しないため、警告を黙らせるための特別な -fno-objc-arc フラグは必要ありません。

通常、ARC 以外のソース ファイルを ARC プロジェクトに追加すると、コンパイラ ステージを通過させないコンパイラ警告が表示されることを理解しています。ただし、私の場合は何も得られません。特に私の質問は、フラグをどのように配置するかではなく(私は知っています)、フラグが必要かどうかです(私はそうではないと推測しています。試してはいけません。) なぜなら、フラグがなければ警告は何もないからです。そして、警告がなかった理由と、私が正しいことをしているかどうかについて、何らかの説明を求めています。

これがスクリーンショットです。ここに画像の説明を入力. OfflineSpotty は私が作成した ARC ファイルです。MapView.xcodeproj は、私が追加した非 ARC プロジェクトです。うまくいけば、イメージが少し明確になります。

4

4 に答える 4

10

ARC を使用するプロジェクトに非 ARC を含める場合は、-fno-objc-arcすべての非アーク ソース ファイルにコンパイラ フラグを設定する必要があります。

Xcode でこれを行うには、アクティブなターゲットに移動し、[ビルド フェーズ] タブを選択します。次に、各非 ARC ソース ファイルを選択し、Enter キーを押して挿入-fno-objc-arcし、[完了] を押して、これらのファイルの ARC を無効にします。(残念ながら、ファイルごとにこの行を追加する必要があり、グループ編集のようなものはありません! :-( ) .更新: グループ編集の場合は、目的のファイルをマークして Enter キーを押すだけです! (ダブルクリックではありません! Enter! ) それがコツです! :-)

スクリーンショットを参照してください: ARC 対応ファイルと非 ARC 対応ファイルの混合

于 2012-06-06T18:29:12.273 に答える
1

コンパイルされたライブラリをプロジェクトに追加する場合は、何も心配する必要はありません。すでにコンパイルされているため、コンパイラがコンパイルする必要がないため、ARCであるかどうかは関係ありません。Add to Targets静的ライブラリをプロジェクトにドラッグし、ポップアップのセクションでターゲットを選択していることを確認してください。

プロジェクトファイルをプロジェクトに追加する場合は、ファイルを含むフォルダーをアプリにドラッグします。ポップアップが表示され、[ターゲットに追加]の下でアプリのターゲットが選択されていることを確認します。これを正しく行うと、非アークファイルがcompile sourcesターゲットのビルドフェーズのセクションに表示されます。他の人が述べたように、その後、-fno-objc-arcコンパイラフラグを非arcファイルに追加できます。これを行うには、すべての非アークファイルを一度に選択してEnterキーを押します。ポップアップが表示され、ポップアップを入力-fno-objc-arcして[完了]を押すことができます。

于 2012-06-07T17:29:07.990 に答える
0

以下のコメントによると、質問は「mapbox ios sdkをプロジェクトに追加する方法は?」です。

次の手順に従って、オープンソースプロジェクトから独自のプロジェクトに静的ライブラリを含めることができます:http://blog.carbonfive.com/2011/04/04/using-open-source-static-libraries-in-xcode- 4/

別の質問は、それが非ARC静的ライブラリである場合(.a)ARCプロジェクトにリンクしている場合はどうなりますか?非ARCライブラリのクラスで何か特別なことをする必要がありますか?

静的ライブラリはすでにコンパイルされているので、心配する必要はありません。

于 2012-06-04T11:29:49.737 に答える
0

プロセスを正確には覚えていませんが、このスクリーンキャストで見たことを覚えていると確信しています: http://nsscreencast.com/episodes/9-automatic-reference-counting

于 2012-06-04T05:27:43.447 に答える