我来自前端开发,所以MVC和OOP仍然给我一些震动。只是向你解释我发送了500个dicionaries(带有100个参数)到nodejs服务器。问题是我为每个参数和每个dicionary创建了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类的方法,但是它内部不可用。
实施此方法的最佳方式是什么?
答案 0 :(得分:3)
通常,不同的类应该位于不同的文件中。一旦PersonInfo
(请将类名称大写)有自己的PersonInfo.h
和PersonInfo.m
,那么您只需添加
#import "PersonInfo.h"
到上面的头文件,以便能够从您的PersonInfo
课程中引用SocketDelegate
(再次请将课程名称大写)。
答案 1 :(得分:3)
要回答您的直接问题,您可以在personInfo
之前在文件顶部转发声明socketDelegate
:
@class personInfo;
通常,您只需将每个公共类放在自己的实现和头文件中,每个实现文件都包含它使用的所有类的头文件。头文件通常只需要转发声明它们引用的类(就像你使用@class GCDAsyncSocket;
一样。但是,导入#import "GCDAsyncSocket.h"
和转发声明都没有意义。你在这里使用它,你不需要导入。但是,要正确使用GCDAsyncSocket
,你需要实现GCDAsyncSocketDelegate
协议,这将要求你导入标题;但是,您应该将该协议实现为实现文件中“类扩展”的一部分。)
如果要继承类,或者实现标头中声明的协议,则只需要在标头中导入某些内容的标头。对于所有其他用途(即使用类或协议作为指针类型的一部分),您可以简单地向前声明它。 (对于实现协议,如果您不需要人们知道您正在实施协议,则可以在具有“类扩展”的实现文件中执行此操作。