trisun 发表于 30-11-2010 19:58:55

iphone 开发学习笔记四

从.Net C#到 Cocoa Touch Objective C 移植工作并不是很顺利,两个平台,两个语言的差异性实在太大,移植工作几乎是重写代码,整个代码量在10多万左右,几乎不可能在短时间内完成。在移植一小部分代码之后,经过仔细考虑,还是决定暂时放弃从Net C#到 Cocoa Touch Objective C 移植,转而采用MonoTouch 的方式有实现对iphone 平台的支持。结果出乎意料的顺利。原以为还需要对源码重新编译才可以在MonoTouch 中使用。但是实际应用中,C#库在MotoTouch 中是二进制兼容的。尽管MISL是个中间语言,但库MonoTouch 中支持了二进制兼容还是让我大为惊讶。也就是在使用Visual studio 在 Windows平台上编译并且扰码过的库可以直接被MotoTouch应用引用而不需要重新编译。
最终决定采用MonoTouch 作为iphone 应用开发工具。并将提供引路蜂地图开发包


[ 本帖最后由 trisun 于 6-12-2010 19:14 编辑 ]

trisun 发表于 30-11-2010 19:59:38

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_PositiveInfinityINT_MAX
/**
* Negative infinity.
*/
#define GDSingleFP_NegativeInfinityINT_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 *) initWithLine:(GDLine *)l;
  -(GDLineFP *) initWithP1:(GDPointFP *)p1 P2:(GDPointFP *)p2;
  -(GDLineFP *) initWithX1:(int32_t) ffX1 Y1:(int) ffY1 X2:(int) ffX2 Y2:(int) 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 语法与之对应。

trisun 发表于 30-11-2010 20:01:38

iphone 开发学习笔记六

结束了选择开发平台的思想斗争,最终选择MonoTouch. 最终的代码需要在iphone上测试,尽管可以使用iphone模拟器来开发,但模拟器和16实际的手机还是有很大的区别的。内存大小,CPU速度,关键的iphone模拟器和实际的手机所支持的API不同,iphone模拟器实际上是个Mac OS应用,很多在手机上不支持的库可以用在iphone模拟器,也就是与能在iphone模拟器上运行的代码不一定可以在iphone手机上运行。
当如果需要将程序部署到手机,就需要加入Apple iOS Member,每年需付$100,而MonoTouch软件的费用是$399,还不算太贵。
于是付款,正好赶上感恩节促销,MonoTouch打折20%。
MonoTouch付费版和试用版不同,需另外安装。
等装好软件后,在详细说明如何在手机上部署开发调试。
收到Apple 注册激活码后,激活居然没有成功,说是信用卡和注册信息不同。明明是一样的 :(。 经过一段时间的使用Mac OS, iphone, XCode, 明显感到Apple 的东西是中看不中用,对于终端用户可能不是什么问题,但对于开发人员来说不是个友好的开发环境。
今天苹果发信过来,可以激活了。
:)

mianwo 发表于 1-12-2010 11:33:58

我的第一个iphone应用快要完工了,希望本周可以提交
不知到apple审核需要多久...

trisun 发表于 2-12-2010 00:18:04

原帖由 mianwo 于 1-12-2010 12:33 发表 http://www.freeoz.org/ibbs/images/common/back.gif
我的第一个iphone应用快要完工了,希望本周可以提交
不知到apple审核需要多久...

什么应用?发个截图看看,收费应用?

mianwo 发表于 2-12-2010 00:38:35

是个测量距离的小工具
免费但是带广告

我之前已经有一个android版本,发布在android market上大约1年了,目前一共有23万多下载。
叫Surveyor,如果你有android手机可以下来玩玩 :D

katsura 发表于 4-12-2010 21:13:16

iPhone gen.1 我就开始搞这个, 到后来还是因为不稳定,转行了。
要赚钱养活自己还是挺难的。

我搞了几个游戏的原型, 后来也没有继续。

dr_watson 发表于 6-12-2010 15:03:33

剛發現這個論壇, 沒想到這里也有搞 iOS 開發的童鞋 :)

我是專門開發 iOS 遊戲的, 我們公司叫 EpicForce, 在香港注冊, 我在墨爾本家里工作, 已發佈了多個作品.

huazhb 发表于 6-12-2010 15:30:17

请问楼上的tz, 能不能稍微透露一下收益情况, 正在几个平台之间犹豫....

dr_watson 发表于 6-12-2010 16:37:46

原帖由 huazhb 于 6-12-2010 16:30 发表 http://www.freeoz.org/ibbs/images/common/back.gif
请问楼上的tz, 能不能稍微透露一下收益情况, 正在几个平台之间犹豫....

暫時來說算是可以温飽, 收入和找份一般的IT工作差不多.

但我們很早就開始搞 iOS 的東西, 如果現在才起步, 會有點難度, 競爭很大! 除非你有很好的創意或很好的推廣方法, 那還是有機會的.

當然, 如果你只是當個業餘活動或有信心和時間可以長期作戰, 那 App Store 是個挺不錯的平台!

trisun 发表于 6-12-2010 18:19:34

原帖由 dr_watson 于 6-12-2010 17:37 发表 http://www.freeoz.biz/ibbs/images/common/back.gif


暫時來說算是可以温飽, 收入和找份一般的IT工作差不多.

但我們很早就開始搞 iOS 的東西, 如果現在才起步, 會有點難度, 競爭很大! 除非你有很好的創意或很好的推廣方法, 那還是有機會的.

當然, 如果你只是當 ...

有时间介绍介绍你们的应用及iOS开发。

dr_watson 发表于 6-12-2010 19:50:15

原帖由 trisun 于 6-12-2010 19:19 发表 http://www.freeoz.org/ibbs/images/common/back.gif


有时间介绍介绍你们的应用及iOS开发。

好的, 有時間一定多來灌水 :D

mianwo 发表于 6-12-2010 19:59:38

原帖由 dr_watson 于 6-12-2010 16:03 发表 http://www.freeoz.org/ibbs/images/common/back.gif
剛發現這個論壇, 沒想到這里也有搞 iOS 開發的童鞋 :)

我是專門開發 iOS 遊戲的, 我們公司叫 EpicForce, 在香港注冊, 我在墨爾本家里工作, 已發佈了多個作品.

敬仰中。。。
我翻了一下,我ipod touch上有你们的iFighter 1945

dr_watson 发表于 6-12-2010 20:59:24

原帖由 mianwo 于 6-12-2010 20:59 发表 http://www.freeoz.org/ibbs/images/common/back.gif

敬仰中。。。
我翻了一下,我ipod touch上有你们的iFighter 1945

謝謝捧場! iFighter 已是我們一年多前的作品, 最近更新時把名字改成了 iFighter 1945, 到目前為止這是我們作品里是最出名的一個, 免費版 (iFighter Lite) 曾打上美國和很多地區的第一名(到現在積累的下截量超過300萬個), 收費版在美國最高位置是總榜第三名和遊戲榜第二名, 在中國日本等地區的第一名.

但我個人認為, 我們另一個作品 Super Laser: The Alien Fighter 在技術上和畫面上更為成熟, 可惜成績只是一般.

繼續努力, 希望很快能有比 iFighter 成績更好的作品! :loveliness:

[ 本帖最后由 dr_watson 于 6-12-2010 22:01 编辑 ]

katsura 发表于 8-12-2010 08:49:27

原帖由 dr_watson 于 6-12-2010 21:59 发表 http://freeoz.org/ibbs/images/common/back.gif


謝謝捧場! iFighter 已是我們一年多前的作品, 最近更新時把名字改成了 iFighter 1945, 到目前為止這是我們作品里是最出名的一個, 免費版 (iFighter Lite) 曾打上美國和很多地區的第一名(到現在積累的下截量超過3 ...

Well done mate! I also LOVE play and make 2D shooting games.

mianwo 发表于 14-12-2010 15:17:58

我的第一个iphone应用今天通过审核上线了
:congra :congra :congra :congra

名字叫GyroSurveyor

ubuntuhk 发表于 14-12-2010 19:45:29

回复 #46 mianwo 的帖子

试了一下,我的3GS没办法安装,需要陀螺仪:( :(

mianwo 发表于 15-12-2010 01:35:18

是的,需要iphone4或者ipod touch4
3GS用磁场感应器的数据理论上也可以做到同样的效果,我做的Android版本就是这个原理,可以在绝大多数android手机上运行。
但是我手上只有ipod touch,没有磁场传感器,所以没法测试。以后如果有机会可以为3gs单独做一个版本。

我自己对比,陀螺仪比磁场感应灵敏度和精确度都强太多了。完全不需要过滤,原始数据就相当理想。android版本中用磁场传感器不过滤的话就会有很大的抖动。

trisun 发表于 27-12-2010 17:00:48

iphone 开发学习笔记七

本篇算是该系列最后一篇,虽不能说是很熟,但使用MonoTouch 开发的其本方法是掌握了,主要是完成当初的任务,实现地图开发包在iPhone上的实现。

使用MonoTouch ,.Net 代码很容易就可以在iPhone上运行,但iphone上 CoreGraphics 图形库的坐标原点在左下角,Y轴方向向上,和其它的图形系统不同,大部分图形系统坐标原点在左上方,Y轴方向向下,如果不注意,图象显示方向就不正确。
下图是在iPhone使用引路蜂地图演示程序的一个截图。

基于iOS, Mac OS 地图开发包将在不久的将来发布,敬请关注。其功能和它在Java ME,Android 平台类似,和iphone SDK 自带的 MapKit 功能主要在于引路蜂地图开发包支持多种地图类开型,离线地图,并可校正中国地图偏移等等

石屹の雪 发表于 31-12-2010 19:10:08

这个不就是谷歌地图么?

想问一下版主,怎么入门做mac开发?

澳洲做这个的多吗?前景怎么样

HAPPY NEW YEAR

mianwo 发表于 2-3-2011 14:09:00

上来更新一下

第一次回这个帖的时候才刚刚开始学,现在iphone开发变成我在澳洲第一份全职工作了
:D :D :D

[ 本帖最后由 mianwo 于 2-3-2011 15:11 编辑 ]

smnox 发表于 3-3-2011 14:39:53

同在澳洲做iphone 开发的来报个到,dr watson是 cocoaChina上的dr watson吗?

mianwo 发表于 4-3-2011 08:26:19

原帖由 smnox 于 3-3-2011 15:39 发表 http://www.freeoz.org/ibbs/images/common/back.gif
同在澳洲做iphone 开发的来报个到,dr watson是 cocoaChina上的dr watson吗?

同行握个手
你在悉尼还是猫本?

smnox 发表于 4-3-2011 12:38:21

原帖由 mianwo 于 4-3-2011 09:26 发表 http://www.freeoz.org/ibbs/images/common/back.gif


同行握个手
你在悉尼还是猫本?
我在悉尼

chrischen79 发表于 16-4-2011 23:32:47

我来报个名,我在国内做ios一年左右,刚准签的176,墨尔本未来的菜鸟新移民,希望能够认识大家。

我的网站:ciderstudios.com

woailvzi 发表于 18-7-2011 21:53:58

原帖由 trisun 于 2-11-2010 00:03 发表 http://www.freeoz.org/ibbs/images/common/back.gif
用 Objective C正是要有耐心,一个简单的 字符相加都很麻烦:Q
NSString 都不支持 “+”

“A" + "B" + "C" +"D"
要写成
NSMutableString* re ...

崩溃!对我这种喜欢用Ruby的人来说...

woailvzi 发表于 18-7-2011 22:12:26

原帖由 dr_watson 于 6-12-2010 20:59 发表 http://www.freeoz.org/ibbs/images/common/back.gif


謝謝捧場! iFighter 已是我們一年多前的作品, 最近更新時把名字改成了 iFighter 1945, 到目前為止這是我們作品里是最出名的一個, 免費版 (iFighter Lite) 曾打上美國和很多地區的第一名(到現在積累的下截量超過3 ...

太牛了..我的iphone4上也有,正好在限免得时候下的。没想到还能碰到原作者...

flyday 发表于 1-8-2011 23:15:33

我的IPAD上也有 IFLIGHTER 1945
还是限免的:lol :lol :lol

flyday 发表于 1-8-2011 23:21:58

上面这么多的IPHONE才人, 不知道谁有兴趣开发一个小 APPS?
我有一个粗略的方案:$ :$ :$

***查过 APPLE STORE, 没有我要的:P
页: 1 [2]
查看完整版本: iphone 开发学习笔记