iphone 开发学习笔记五

iphone 开发学习笔记五,第1张

概述从.Net C#到 Cocoa Touch Objective C的移植工作进行得比较缓慢,完成了二维图形库内部类大约20多个类的移植,工作量太量,最终决定放弃,这里对移植工作作个小结,以作为以后移植工作参考。 1. Name space    Objective C 不支持命令空间,而是采用前缀的方式来避免命名冲突。在C#库有外部类和内部类之分,开发包中内部类一般有internal 或是不想对开 从.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 语法与之对应 总结

以上是内存溢出为你收集整理的iphone 开发学习笔记五全部内容,希望文章能够帮你解决iphone 开发学习笔记五所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1059175.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存