偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

總結(jié):.Net的C#移植到Cocoa Touch的Objective-C

移動開發(fā) iOS
本文將講述如何完成從.Net的C#到Cocoa Touch的Objective-C移植,整個過程非常緩慢,完成了二維圖形庫內(nèi)部類大約20多個類的移植,工作量太量,雖然最終決定放棄,但是對于開發(fā)者還是有很多幫助的。

從.Net C#到 Cocoa Touch Objective C的移植工作進行得比較緩慢,完成了二維圖形庫內(nèi)部類大約20多個類的移植,工作量太量,最終決定放棄,這里對移植工作作個小結(jié),以作為以后移植工作參考。

1.Name space

Objective-C 不支持命令空間,而是采用前綴的方式來避免命名沖突。在C#庫有外部類和內(nèi)部類之分,開發(fā)包中內(nèi)部類一般有internal 或是不想對開發(fā)人員開放的類。在移植到 Objective-C 時,可以采用兩套前綴的方式來解決這個問題,比如采用GD (Guidebee)作為內(nèi)部類前綴,MD (Mapdigit)作為外部類前綴,最后發(fā)布開發(fā)包時,只提供MD開頭的頭文件。開發(fā)包使用都無法得知GD開頭的類,也就實現(xiàn)了隱藏內(nèi)部類的目的。

2.抽象類

Objective-C 中沒有抽象類的概念,移植時可以直接用普通類代替,如果不想在代碼在有這個抽象類的實例,可以實現(xiàn)init 方法,使其拋出異常。

3.類常量

在 C# 類中常常會定義一些類常量,而在 Objective-C中不支持,這時可以用宏來實現(xiàn)

比如

  1. internal class SingleFP 
  2.  
  3.  
  4. /** 
  5.  
  6. * Positive Infinity. 
  7.  
  8. */ 
  9.  
  10. private const int PositiveInfinity = int.MaxValue; 
  11.  
  12. /** 
  13.  
  14. * Negative infinity. 
  15.  
  16. */ 
  17.  
  18. private const int NegativeInfinity = int.MinValue; 
  19.  
  20. 。。。 
  21.  

可以在GDSingleFP.h 中定義

  1. /** 
  2.  
  3. * Positive Infinity. 
  4.  
  5. */ 
  6.  
  7. #define GDSingleFP_PositiveInfinity INT_MAX 
  8.  
  9. /** 
  10.  
  11. * Negative infinity. 
  12.  
  13. */ 
  14.  
  15. #define GDSingleFP_NegativeInfinity INT_MIN 

宏加上GDSingleFP 可以避免可能命名沖突。

4.C # Interface

則對應于 Objective 的 Protocol

5.C# 類中私用方法

一是在Objective-C頭文件中不要定義這些私有方法,直接定義在.m 文件中。這樣可以實現(xiàn)對這些方法的隱藏。

二是采用 Objective-C的私有 Category 來實現(xiàn)私有方法。

6.Array Copy

Objective-C 中沒有提供 Array.Copy 方法,我在移植時,采用的是 memcpy 來實現(xiàn)對數(shù)組的拷貝

7.構(gòu)造函數(shù)和析構(gòu)函數(shù)

由于Objective-C 不支持重載和對內(nèi)存的自動管理。

對于C#中構(gòu)造函數(shù)移植到Objective-C時

采用initXXX 命名方法,如果類中有NSObjective 派生類,注意加上dealloc 來釋放內(nèi)存,以免造成內(nèi)存泄漏。

比如LineFP有構(gòu)造函數(shù)

  1. public LineFP(); 
  2.  
  3. public LineFP(LineFP l); 
  4.  
  5. public LineFP(PointFP p1, PointFP p2); 
  6.  
  7. public LineFP(int ffX1, int ffY1, int ffX2, int ffY2); 

對應的Objective-C GDLineFP.h 中可以定義下列構(gòu)造函數(shù)

  1. -(GDLineFP *) init; 
  2.  
  3. -(GDLineFP *) initWithLineGDLine *)l; 
  4.  
  5. -(GDLineFP *) initWithP1GDPointFP *)p1 P2GDPointFP *)p2; 
  6.  
  7. -(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. 靜態(tài)構(gòu)造函數(shù)

在Objective-C 中可以使用 +(initialize) 來實現(xiàn),+(initialize) 在類初始化前執(zhí)行,但如果該類有子類時要注意。在子類初始化前+(initialize) 也會執(zhí)行,如果要實現(xiàn)singleton時注意不要執(zhí)行多次。

11. Math 類

在Cocoa Foundation類中無對應類支持,必需使用 Math.h 中 C接口。

12. 對于返回類對象的函數(shù)

由于Objeictive-C需要手工管理內(nèi)存,一般是采用誰創(chuàng)建誰釋放的原則,對于返回類對象的函數(shù)由于不知道調(diào)用者什么時候使用完該類對象,一般需使用autorelease pool ,這個需要好好研究一下Objective-C 的內(nèi)存管理機制,否則可以造成內(nèi)存泄漏。

其它的C#語法基本上可以找到對應的Objective-C 語法與之對應。

責任編輯:佚名 來源: imobilebbs
相關推薦

2011-05-11 15:19:01

CocoaObjective-C

2011-07-28 18:11:18

Objective-C Cocoa 編程

2011-08-15 16:09:44

Cocoa對象Objective-C

2015-06-25 11:21:33

C++Objective-C

2011-08-04 13:55:10

Cocoa Objective- 文件

2014-07-01 09:22:01

SwiftObjective-CiOS

2014-11-25 10:18:17

Objective-C

2014-07-29 09:44:35

2013-04-11 13:41:30

Objective-CiOS編程

2011-08-10 18:07:29

Objective-C反射

2016-03-30 09:56:07

c語言變量聲明objectivec

2013-06-20 10:40:32

Objective-C實現(xiàn)截圖

2013-03-27 12:54:00

iOS開發(fā)Objective-C

2011-05-11 15:58:34

Objective-C

2011-05-11 11:20:26

Objective-C

2012-01-18 10:13:50

Objective-CiOSself

2011-12-12 13:22:51

CocoaObjective-C

2011-08-04 10:57:33

Objective-C C語言 BOOL

2015-07-08 10:47:57

Using Swift CocoaObjective-C

2014-04-28 09:56:56

Objective-CiOS命名空間
點贊
收藏

51CTO技術棧公眾號