iphone開發學習筆記五

來源:互聯網
上載者:User

從.Net C#到 Cocoa Touch Objective C的移植工作進行得比較緩慢,完成了二維圖形庫內部類大約20多個類的移植,工作量太量,最終決定放棄,這裡對移植工作作個小結,以作為以後移植工作參考。
1. Name space
   Objective C 不支援命令空間,而是採用首碼的方式來避免命名衝突。在C#庫有外部類和內部類之分,開發包中內部類一般有internal 或是不想對開發人員開放的類。在移植到 Objective C 時,可以採用兩套首碼的方式來解決這個問題,比如採用GD (Guidebee)作為內部類首碼,MD (Mapdigit)作為外部類首碼,最後發布開發包時,只提供MD開頭的標頭檔。開發包使用都無法得知GD開頭的類,也就實現了隱藏內部類的目的。
2. 抽象類別
  Objective C 中沒有抽象類別的概念,移植時可以直接用普通類代替,如果不想在代碼在有這個抽象類別的執行個體,可以實現init 方法,使其拋出異常。
3 類常量
 在 C# 類中常常會定義一些類常量,而在 Objective C中不支援,這時可以用宏來實現
比如
  internal class SingleFP
    {
        /**
         * Positive Infinity.
         */
        private const int PositiveInfinity = int.MaxValue;
        /**
         * Negative infinity.
         */
        private const int NegativeInfinity = int.MinValue;
   。。。
  }
可以在GDSingleFP.h 中定義
/**
* Positive Infinity.
*/
#define GDSingleFP_PositiveInfinity  INT_MAX
/**
* Negative infinity.
*/
#define GDSingleFP_NegativeInfinity  INT_MIN
宏加上GDSingleFP 可以避免可能命名衝突。
4. C # Interface
則對應於 Objective 的 Protocol
5.  C# 類中私用方法
 一是在Objective C標頭檔中不要定義這些私人方法,直接定義在.m 檔案中。這樣可以實現對這些方法的隱藏。
 二是採用 Objective C的私人 Category 來實現私人方法。
6. Array Copy
   Objective C 中沒有提供 Array.Copy 方法,我在移植時,採用的是 memcpy 來實現對數組的拷貝
7. 建構函式和解構函式
 由於Objective C 不支援重載和對記憶體的自動管理。
  對於C#中建構函式移植到Objective C時
  採用initXXX 命名方法,如果類中有NSObjective 衍生類別,注意加上dealloc 來釋放記憶體,以免造成記憶體流失。
 比如LineFP有建構函式
  public LineFP();
  public LineFP(LineFP l);
  public LineFP(PointFP p1, PointFP p2);
  public LineFP(int ffX1, int ffY1, int ffX2, int ffY2);
  對應的Objective C GDLineFP.h 中可以定義下列建構函式
  -(GDLineFP *) init;
  -(GDLineFP *) initWithLineGDLine *)l;
  -(GDLineFP *) initWithP1GDPointFP *)p1 P2GDPointFP *)p2;
  -(GDLineFP *) initWithX1int32_t) ffX1 Y1int) ffY1 X2int) ffX2 Y2int) ffY2;
8. int ,long
     為避免int ,long 在不同平台上定義不同,盡量使用 int32_t, int64_t 來定義。
9. 類變數定義
  在C#類可以定義 Static 類變數,而在Objective C 中無法定義類變數,這時可以將類變數定義於類定義之外,在標頭檔中使用 extern 。
10. 靜態建構函式
 在Objective C 中可以使用 +(initialize) 來實現,+(initialize) 在類初始化前執行,但如果該類有子類時要注意。在子類初始化前+(initialize) 也會執行,如果要實現singleton時注意不要執行多次。
11. Math 類
 在Cocoa Foundation類中無對應類支援,必需使用 Math.h 中 C介面。
12. 對於返回類對象的函數
 由於Objeictive C需要手工管理記憶體,一般是採用誰建立誰釋放的原則,對於返回類對象的函數由於不知道調用者什麼時候使用完該類對象,一般需使用 autorelease pool ,這個需要好好研究一下Objective C 的記憶體管理機制,否則可以造成記憶體流失。
其它的C#文法基本上可以找到對應的Objective C 文法與之對應

 


摘自 引路蜂移動軟體

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.