0

私は質問を正しく表現していないかもしれませんが、私が求めていることが100%になるかどうかはわかりませんので、ここに行きます:-)

Xcodeでは、ヘッダーファイルの@interfaceの上に@class(クラスの名前)を設定できます。これは、クラスの名前でUIViewControllerを変更することと同じですか?以下のコードを参照してください。

これは同じですか-

@class CoreDataClass;

@interface FlipsideViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
{

}

//This file declares the UITableView
@property (nonatomic, retain) IBOutlet UITableView *mainTableView;

@property (nonatomic, retain) CoreDataClass *cdc;

このように:

@interface FlipsideViewController : CoreDataClass <UITableViewDataSource, UITableViewDelegate>
{

}

//This file declares the UITableView
@property (nonatomic, retain) IBOutlet UITableView *mainTableView;

@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;

@end

??

これが同じでない場合、それはどのように異なり、異なる実装の利点は何ですか?

違いは、それらが類似しているかどうかだけが実際に尋ねられます:-)

4

4 に答える 4

3

@classはクラスの作成には使用されませんが、別のクラスを前方宣言するために使用されます。良い説明については、この質問を参照してください。

于 2012-08-26T21:33:00.853 に答える
1

それらは関連していません。違いは、View Controllerのスーパークラス(「親」クラス)が異なることです(これにより、認識されないセレクターエラーが発生する可能性があります...)。キーワードを使用してクラスを前方宣言する@classことは、1つのクラスを参照するためだけにフレームワークヘッダー階層全体をインポートしたくない場合に、クラスを参照するための便利な方法です。つまり、クラスが存在することを除いて、クラスについて何も知る必要がない場合は、このキーワードを使用できます。ただし、クラスを多用する場合は注意が必要です。そのような場合、クラスの前方宣言は適切なソリューションとは見なされません。

于 2012-08-26T21:33:10.293 に答える
1

それらはまったく同じではありません。最初のケースは「前方宣言」です。これは、クラスCoreDataClassが存在することをコンパイラに通知しているため、それを定義するファイルを実際にインポートしなくても、ヘッダーファイルで参照できます。

2番目のケースでは、FlipsideViewControllerがCoreDataClassのサブクラスであり、そのすべてのメソッドとインスタンス変数を継承することを宣言しています。

于 2012-08-26T21:33:12.403 に答える
0

最初のケースでは、@ classを使用すると、どこかでCoreDataClassを使用することをXCodeに通知し、たとえば.mファイルにヘッダーを#importします。2番目のケースでは、CoreDataClassから継承します(すべてのパブリックおよび保護されたアクセスを取得します)プロパティ)

于 2012-08-26T21:33:01.690 に答える