3

私はフロントエンド開発の出身なので、MVC と OOP には今でも頭が揺れます。説明するために、私は 500 個の辞書 (100 個のパラメーターを持つ) を nodejs サーバーに送信します。問題は、各パラメーターと各辞書に対して ivar を作成していることです。たとえば、同期化クラスがあるのと同じヘッダー ファイルに、person クラスのようないくつかのクラスを作成したいと考えています。ヘッダーに次のようなものを作成できます。

#import <Foundation/Foundation.h>
#import "GCDAsyncSocket.h"

@class GCDAsyncSocket;

@interface socketDelegate : NSObject<NSStreamDelegate>
{
    NSInputStream   *inputStream;
    NSOutputStream  *outputStream;
    NSMutableArray  *messages;
    GCDAsyncSocket *socket;
    dispatch_queue_t connectionQueue_;
}

- (void) initNetworkCommunication;
- (void) sendMessage:(NSArray *)message:(int)numberOfContactsToSend;

@end

@interface  personInfo: NSObject

@property (nonatomic,weak)NSString*firstName;
@property (nonatomic,weak)NSString*lastName;
@property (nonatomic,weak)NSDictionary*dicToSendWithConctactInfo;

@end

しかし、実装では、複数のクラスを処理する方法がわかりません。「socketDelegate」クラス内に person クラスを使用する必要があるメソッドがあるように、その内部では使用できません。

これを実装する最良の方法は何ですか?

4

2 に答える 2

3

通常、異なるクラスは異なるファイルにある必要があります。PersonInfo(クラス名を大文字にしてください)独自のPersonInfo.hとを取得したらPersonInfo.m、単に追加します

#import "PersonInfo.h"

クラスから参照できるように、上記のヘッダーファイルに移動しPersonInfoますSocketDelegate(ここでも、クラス名を大文字にしてください)。

于 2012-12-19T18:27:29.957 に答える
3

差し迫った質問に答えるにpersonInfoは、ファイルの先頭で次のように前方宣言できますsocketDelegate

@class personInfo;

通常、各パブリック クラスを独自の実装ファイルとヘッダー ファイルに配置するだけで、各実装ファイルには、使用するすべてのクラスのヘッダー ファイルが含まれます。ヘッダー ファイルは通常、参照するクラスを前方宣言するだけで済みます( @class GCDAsyncSocket;. #import "GCDAsyncSocket.h"'t need the import. ただし、 を適切に使用するには、ヘッダーをインポートする必要があるプロトコルGCDAsyncSocketを実装する必要があります; ただし、実装ファイル内の「クラス拡張」の一部としてそのプロトコルを実装する必要があります)。GCDAsyncSocketDelegate

クラスをサブクラス化する場合、またはヘッダーで宣言されているプロトコルを実装する場合にのみ、ヘッダーに何かのヘッダーをインポートする必要があります。他のすべての用途 (つまり、クラスまたはプロトコルをポインター型の一部として使用する場合) では、単純に前方宣言できます。(また、プロトコルを実装するために、プロトコルを実装していることを人々に知られたくない場合は、「クラス拡張」を使用して実装ファイルでそれを行うことができます。

于 2012-12-19T19:31:46.653 に答える