ios多类实现

时间:2012-12-19 18:22:51

标签: objective-c ios cocoa oop class

我来自前端开发,所以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类的方法,但是它内部不可用。

实施此方法的最佳方式是什么?

2 个答案:

答案 0 :(得分:3)

通常,不同的类应该位于不同的文件中。一旦PersonInfo(请将类名称大写)有自己的PersonInfo.hPersonInfo.m,那么您只需添加

#import "PersonInfo.h"

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

答案 1 :(得分:3)

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

@class personInfo;

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

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