我编写 C 代码已经有一段时间了,但对 Objective-C 和 OO 程序设计还是很陌生。我在如何设计我的程序和它的类上遇到了麻烦——我的备用过程编程范式将一个不透明的指针传递给所有东西,只是不会安静地死去。我正在用 Objective-C 的 Xcode4 编写一个简单的程序,我对设计和约定有一些疑问。我设计了两个类“PacketCapture”和“IPGeo”。第一个是 libpcap 的轻量级包装器,添加了一些解析逻辑,第二个是 MaxMind 的 GeoIP C API 的轻量级包装器。在我的主模块中,我实例化了 PacketCapture 类并将控制权传递给数据包捕获循环:
int main(int argc, const char *argv[])
{
@autoreleasepool
{
PacketCapture *_PacketCapture = [[PacketCapture alloc] init:"en1" withFilter:""];
if (_PacketCapture == nil)
{
NSLog(@"Can't instantiate PacketCapture class");
return (-1);
}
IPGeo *_IPGeo = [[IPGeo alloc] init:"/usr/local/share/GeoIP/GeoIPCity.dat"];
if (_IPGeo == nil)
{
NSLog(@"Can't instantiate IPGeo class");
return (-1);
}
NSLog(@"entering packet loop...");
[_PacketCapture packetCapture];
}
return (0);
}
在该packetCapture
方法内部调用了一个解析函数,该函数将数据包切碎并显示出来。我需要在解析代码中使用 GeoIP 逻辑来针对地理数据库查找 IP 地址。这就是我的问题和普遍的困惑。
我的问题:
我应该在哪里实例化 GeoIP 类?
在类糟糕的 OO 设计中,对象内部是否存在无限循环?感觉还可以。也许如果我重组这个问题会很容易解决?
谢谢你的帮助。