我知道這個問題沒有人回答,但我想讓人們考慮他們將如何處理這種情況。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