自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

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

1.Name space

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

2.抽象類

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

3.類常量

在 C# 類中常常會(huì)定義一些類常量,而在 Objective-C中不支持,這時(shí)可以用宏來(lái)實(shí)現(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

則對(duì)應(yīng)于 Objective 的 Protocol

5.C# 類中私用方法

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

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

6.Array Copy

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

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

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

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

采用initXXX 命名方法,如果類中有NSObjective 派生類,注意加上dealloc 來(lái)釋放內(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); 

對(duì)應(yīng)的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 在不同平臺(tái)上定義不同,盡量使用 int32_t, int64_t 來(lái)定義。

9. 類變量定義

在C#類可以定義Static類變量,而在Objective-C 中無(wú)法定義類變量,這時(shí)可以將類變量定義于類定義之外,在頭文件中使用extern 。

10. 靜態(tài)構(gòu)造函數(shù)

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

11. Math 類

在Cocoa Foundation類中無(wú)對(duì)應(yīng)類支持,必需使用 Math.h 中 C接口。

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

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

其它的C#語(yǔ)法基本上可以找到對(duì)應(yīng)的Objective-C 語(yǔ)法與之對(duì)應(yīng)。

責(zé)任編輯:佚名 來(lái)源: imobilebbs
相關(guān)推薦

2011-05-11 15:19:01

CocoaObjective-C

2011-08-15 16:09:44

Cocoa對(duì)象Objective-C

2011-07-28 18:11:18

Objective-C Cocoa 編程

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

2016-03-30 09:56:07

c語(yǔ)言變量聲明objectivec

2014-07-29 09:44:35

2013-04-11 13:41:30

Objective-CiOS編程

2014-11-25 10:18:17

Objective-C

2011-08-10 18:07:29

Objective-C反射

2012-01-18 10:13:50

Objective-CiOSself

2013-03-27 12:54:00

iOS開發(fā)Objective-C

2011-05-11 11:20:26

Objective-C

2011-05-11 15:58:34

Objective-C

2013-06-20 10:40:32

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

2011-12-12 13:22:51

CocoaObjective-C

2011-08-04 10:57:33

Objective-C C語(yǔ)言 BOOL

2015-07-08 10:47:57

Using Swift CocoaObjective-C

2014-04-28 09:56:56

Objective-CiOS命名空間
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)