`
mapdigit
  • 浏览: 242680 次
文章分类
社区版块
存档分类
最新评论

iphone 开发学习笔记五

 
阅读更多
从.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开发学习笔记(1)--NSLog

    iphone开发学习笔记(1)--NSLog

    iPhone开发基础教程_学习笔记

    iPhone开发基础教程_学习笔记.docx

    iphone开发一年的工作笔记

    这份文档是我从事ios开发一年以来,总结工作中常用到的200余个ios小知识点,并添加可以调试观看的实例代码,方便iso开发者学习和交流,弄清楚这些,基本从事ios开发没什么问题。

    IOS学习笔记

    OS开发学习笔记,包含基本原理讲解及每篇附上的示例程序代码!帮助iOS开发初学者一步一步进阶,分享最新的学习心得和体会! http://blog.csdn.net/column/details/ryan-zone.html

    objective c学习笔记和示例

    苹果的iPhone和iPad应用开发都指定使用同一开发语言:Objective-C语言。这是一种简单的面向对象编程语言,它的基础是C程序设计语言。Objective-C不仅功能强大,而且简单易学。Objective-C已经成为苹果系统下应用程序...

    swift_study:详细信息!Swift iPhone App 开发入门笔记

    swift_study详细信息!Swift iPhone App 开发入门注的示例代码用于学习 Swift 开发

    使用XIB自定义一个UIView

    iPhone开发学习笔记005——使用XIB自定义一个UIView,然后将这个view添加到controller的view。

    CSR8675蓝牙开发板CSR内部培训资料.zip

    5.CSR 86XX 使用 IPHONE电量.pdf 6.CSR8640在USB Mode模式使用Mic.pdf 7.CSR8670_Product_Overview.pdf 1.ADK_2.0_Software_Training.pdf 2.ADK2.0编译BC5MM固件.pdf 3.ADK2.0编译CSR8670固件.pdf 4.Bluetooth_Low_...

    timenote时光笔记(记事本软件) v2.37.zip

    TimeNote为珍惜时间,珍惜往事的人潜心开发的软件,一款具有独立文件与事件预测的跨平台日程管理软件(支持Android、IPhone与各PC平台)。本软件采用独家原创数据解码格式,支持云端异步操作,并能对普遍使用的ICS文件...

    详解iOS学习笔记(十七)——文件操作(NSFileManager)

    iOS的沙盒机制,应用只能...上面的完整路径为:用户->资源库->Application Support->iPhone Simulator->6.1->Aplications Documents:苹果建议将程序创建产生的文件以及应用浏览产生的文件数据保存在该目录下,iTunes

    高仿版百度地图基于iOS SDK v2.5.0,功能完善!

    本人不才,当时还不会用Xcode内置的Interface Builder来设计界面,因此这是用纯代码写的,测试机子也只有iPhone4,没考虑其他iPhone的分辨率,在界面上是不适配的,但是代码的话还是值得学习的。废话不说先上代码! ...

    WatchNotes:手腕上的笔记!

    注意事项 Watch Notes是iPhone和Apple Watch应用程序,它允许用户将笔记从iPhone共享到Apple Watch。... 如果您有兴趣学习开发Apple Watch应用程序,请在下面订阅我的YouTube频道: Twitter上的@azamsharp

    Insofta Cover Commander(3d模型制作软件)官方正式版V7.0.0

    广泛应用于电子书、3D文本、名片、手册、笔记本电脑、iMac、iPhone、iPad Pro、Nexus、蓝光光盘等大多数产品,即便是刚接触Insofta Cover Commander的新手也能快速上手,学习成本和使用门槛都非常的低,所以根本不会...

    macOS-iOS-iPadOS-Guide

    是适用于Apple系列iPhone产品的高级移动操作系统(OS)。 iOS 14 是适用于Apple系列iPad产品的高级移动操作系统(OS)。 iPadOS 14 取得软件 macOS / iOS / iPadOS开发 在Xcode 12中使用SwiftUI开发 Swift 快速...

    《电动力学(第二版)》(郭硕鸿) 习题答案doc

    《iPhone开发基础教程》.pdf (中文完整版) 使用C++实现录音的源码 一个VC写的数值曲线显示类 ASP.NET 公司框架源码(70%成品) asp.net编写的企业网站,强大的后台支持 笔记本电脑架构硬件揭秘 Visual C++...

    (开题报告)基于Android的日程表管理系统设计与实现--.doc

    目前使用Android系统的手机的数量已经超越iPhone,Android系统已经成为全球使用 量最大的手机系统。 相关数据显示:1.Android用户已经达9亿,不就会达到10亿; 2.仅有10%的国家没有被Android覆盖 3.人才需求仍然...

    wdi_project_2:咖啡厅应用

    用户注册:设计/ oauth图片上传:运营商咖啡馆添加:谷歌API,咖啡馆的自动完成质量:需打勾的框/标记评论:可以启用用户添加用户评论(也许是评论员),用户评分0/5 加: ml 萨斯(波旁酒); 移动响应式样式; ...

    leetcode中国-algorithm-teach:算法教学

    本作品是学习和实践数据结构和算法的一些笔记。 第一部分是一些基本的数据结构和算法的简单介绍,如链表、堆栈、队列、树、排序等。 第二部分是编程问题的分析和总结,大部分的编程问题来自、、、、。 第三部分是...

Global site tag (gtag.js) - Google Analytics