1

私は以前(1年ほど前)にObjective-Cを書いたことがありますが、それはARCの前でした。NSObject(または他のNS *クラス)から継承する必要のないクラスがありますが、継承しない場合、シングルトンをインスタンス化しようとすると次のエラーが発生します。

+(Operator *) getInstance
{
  static Operator * g_instance = NULL;

  if (NULL == g_instance)
  {
      @synchronized( self )
      {
         g_instance = [[Operator alloc] init];
      }
  }

  return( g_instance );
}

ARCの問題としてリストされているセレクター'alloc'の既知のクラスはありません。
ARCでは、すべてのクラスがNSObjectから継承する必要がありますか?それとも私はもっと大きなアイデアを見逃していますか?

4

3 に答える 3

3

alloc実装を提供せず、クラスを継承せずにクラスを呼び出してNSObjectいる場合、それが何を期待しているのかわかりませんか?

于 2012-07-23T20:55:01.160 に答える
0

これはARCとは何の関係もないと思います。Alloc は NSObject のメソッドなので、フォーム NSObject を継承しない場合、Alloc をどのように使用すると予想されますか?

于 2012-07-23T20:56:25.207 に答える
0

Objective C を使用している場合、各クラスは、メッセージ処理と有効期間管理を提供する基本クラスから継承する必要があります。

もともと Object クラスがありましたが、NexTStep 3 から Apple と Gnu のコンパイラとランタイムが NSObject を使用するように変更されました。主に分散オブジェクトに使用される別の基本クラス NSProxy もあります。NSObject は、KVO のような基本的な Cocoa 機能も提供します。Apple の「The Root classとこの SO questionを参照してください。

あなたの場合、コンパイラは alloc メッセージの定義を見つけることができませんが、実行時に Operator クラスが作成された場合にメッセージを送信する方法を知りません。

于 2012-07-26T09:52:27.040 に答える