5

プロジェクトを ARC にリファクタリングしました。一見問題ないように見えますが、通知センターを使用するオブジェクトがあります。カスタムの dealloc メソッドでオブザーバーを削除しました。非ARCプロジェクトではうまくいきました。ARC でも動作しますが、「メソッドに [super dealloc] 呼び出しがない可能性があります」というクレイジーな警告が表示されます。ARC プロジェクトでは、メソッドが終了すると自動的に実行されます。さらに良いことに、ARC プロジェクトでそれを呼び出してはいけません! これは XCode のバグに違いありません。これが私のコードです:

- (void)dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    // [super dealloc]; will be called automatically
}

私は常に、警告をスローしないコードを書きたいと思っています。その黄色い感嘆符を回避する方法はありますか?

4

3 に答える 3

10

次の行をdeallocメソッドに入れて、ARCが有効になっていることを確認します。

#if ! __has_feature(objc_arc)
#error "ARC is off"
#endif

ビルド中にコンパイラエラーが発生した場合は、ARCがオフになっていることを確認し、理由を検索する必要があります。これは、おそらくターゲットのファイルごとのビルド設定にあります。

于 2012-08-28T12:19:16.757 に答える
1

次の手順でこの警告を解決しました。

  1. <yourapp>.xcodeprojfile( <classname>.m) クラスが上記の警告を表示しているtarget( ) をクリックします。
  2. TARGET >> Build Phases >> Compile sourcesを選択
  3. ファイルを検索
  4. コンパイラ フラグを追加する -fobjc-arc

これは以下のようになります

ここに画像の説明を入力

于 2016-01-06T08:25:59.160 に答える