成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

總結:.Net的C#移植到Cocoa Touch的Objective-C

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

從.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中不支持,這時可以用宏來實現

比如

  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 文件中。這樣可以實現對這些方法的隱藏。

二是采用 Objective-C的私有 Category 來實現私有方法。

6.Array Copy

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

7.構造函數和析構函數

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

對于C#中構造函數移植到Objective-C時

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

比如LineFP有構造函數

  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 中可以定義下列構造函數

  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. 靜態構造函數

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

11. Math 類

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

12. 對于返回類對象的函數

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

其它的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實現截圖

2013-03-27 12:54:00

iOS開發Objective-C

2011-05-11 11:20:26

Objective-C

2011-05-11 15:58:34

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技術棧公眾號

主站蜘蛛池模板: 久久人操 | 成人精品在线观看 | 五月综合久久 | 国产成人精品久久二区二区91 | 我想看国产一级毛片 | 免费视频99 | 中文字字幕一区二区三区四区五区 | 中文字幕一区二区三区在线观看 | 精品国产乱码久久久久久闺蜜 | 国产精品精品视频一区二区三区 | 久久久精品一区 | 日本欧美国产在线 | 国产成人影院 | 日韩欧美国产一区二区 | 欧美大片一区二区 | 亚洲午夜久久久 | 99国产精品久久久久久久 | 亚洲视频在线观看一区二区三区 | 久久精品一区二区三区四区 | 国内久久精品 | 亚洲一区二区三区 | 国产精品久久久久久久久婷婷 | 欧美视频在线播放 | 日本不卡一区二区 | 日韩精品激情 | 久久一区精品 | 久久精品国内 | 久久久久国产精品一区三寸 | 日韩精品一区二区三区视频播放 | 91亚洲视频在线 | 丁香综合| 一区二区中文字幕 | 国产在线1区 | 99久热在线精品视频观看 | 99视频在线免费观看 | 成人a免费 | 黄色一级电影免费观看 | 久久精品小视频 | 毛片a级 | 三级国产三级在线 | 麻豆av片 |