我知道这个问题没有人回答,但我想让人们考虑他们将如何处理这种情况。Objective-C封装API设计方法
我正在写一个Objective-C包装到C库。我的目标是:
1)包装使用Objective-C对象。例如,如果C API定义了诸如char * name之类的参数,则Objective-C API应该使用name:(NSString *)。
2)使用Objective-C包装器的客户端不必知道C库的内部工作原理。
速度没有任何问题。
使用简单的参数很容易。接受NSString并将其转换为C字符串以将其传递给C库肯定没有问题。
当涉及复杂的结构时,我的优柔寡断进来了。
比方说,你有:
struct flow
{
long direction;
long speed;
long disruption;
long start;
long stop;
} flow_t;
And then your C API call is:
void setFlows(flow_t inFlows[4]);
因此,一些选择的是:
1)暴露flow_t结构到客户端,并有Objective-C的API把这些结构的数组
2)构建一个包含属性的NSArray的四个NSDray,并将其作为参数传递给参数
3)创建一个包含结构属性的四个“Flow”对象的NSArray,我对方法的分析:
方法1:最简单。但是,它不符合设计目标。方法2:由于某种原因,这在我看来是最“目标C”的方式。但是,NSDictionary的每个元素都必须包装在一个NSNumber中。现在看来我们只是为了传递一个结构的等价物而做了很多事情。方法3:从面向对象的角度来看,似乎对我来说最清洁,而额外的封装可能会在以后派上用场。然而,就像#2一样,现在看起来我们正在做很多事情(创建一个数组,创建和初始化对象)只是为了传递一个结构。
所以,问题是,你会如何处理这种情况?我还没有考虑其他选择吗?我提出的方法有没有其他的优点或缺点,我不考虑?
框架本身包含结构。 NSRange等。我认为在结构上没有一个通用的决定。这取决于。 – 2010-03-17 17:23:39