3

我来自前端开发,所以 MVC 和 OOP 仍然让我有些头疼。只是为了向您解释,我向 nodejs 服务器发送了 500 个字典(带有 100 个参数)。问题是我为每个参数和每个字典创建了 ivars。现在我想在我的同步类的同一个头文件中创建一些类,比如一个人类。我可以在标题上做这样的事情:

#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.hand PersonInfo.m,那么您只需添加

#import "PersonInfo.h"

到上面的头文件,以便能够PersonInfo从您的SocketDelegate类中引用(再次,请大写类名)。

于 2012-12-19T18:27:29.957 回答
3

要回答您的直接问题,您可以personInfo在文件顶部前向声明socketDelegate

@class personInfo;

通常你只是把每个公共类放在它自己的实现和头文件中,每个实现文件都包含它使用的所有类的头文件。头文件通常只需要转发声明它们引用的类(就像您对@class GCDAsyncSocket;. #import "GCDAsyncSocket.h"'不需要导入。但是,要正确使用GCDAsyncSocket,您将需要实现GCDAsyncSocketDelegate协议,这将要求您导入标头;但是,您可能应该将该协议作为实现文件中“类扩展”的一部分来实现)。

如果您是子类化类或实现在标头中声明的协议,则只需要在标头中导入某些内容的标头。对于所有其他用途(即使用类或协议作为指针类型的一部分),您可以简单地前向声明它。(并且对于实现协议,如果您不需要人们知道您正在实现协议,您可以在实现文件中使用“类扩展”来执行此操作。

于 2012-12-19T19:31:46.653 回答