找回密码
 FreeOZ用户注册
12
返回列表 发新帖回复
楼主: trisun
打印 上一主题 下一主题

[论坛技术] iphone 开发学习笔记

[复制链接]
31#
 楼主| 发表于 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 编辑 ]

评分

参与人数 2威望 +100 收起 理由
coredump + 50 你太有才了!
yearshappy + 50 我很赞同!

查看全部评分

回复  

使用道具 举报

32#
 楼主| 发表于 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_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 语法与之对应。

评分

参与人数 2威望 +100 收起 理由
coredump + 50 谢谢分享!
ubuntuhk + 50 谢谢分享!

查看全部评分

回复  

使用道具 举报

33#
 楼主| 发表于 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 的东西是中看不中用,对于终端用户可能不是什么问题,但对于开发人员来说不是个友好的开发环境。
今天苹果发信过来,可以激活了。

回复  

使用道具 举报

34#
发表于 1-12-2010 11:33:58 | 只看该作者
我的第一个iphone应用快要完工了,希望本周可以提交
不知到apple审核需要多久...

评分

参与人数 1威望 +50 收起 理由
trisun + 50 恭喜你!

查看全部评分

回复  

使用道具 举报

35#
 楼主| 发表于 2-12-2010 00:18:04 | 只看该作者


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

使用道具 举报

36#
发表于 2-12-2010 00:38:35 | 只看该作者
是个测量距离的小工具
免费但是带广告

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

评分

参与人数 1威望 +50 收起 理由
ubuntuhk + 50 很不错的下载量啊!

查看全部评分

回复  

使用道具 举报

37#
发表于 4-12-2010 21:13:16 | 只看该作者
iPhone gen.1 我就开始搞这个, 到后来还是因为不稳定,转行了。
要赚钱养活自己还是挺难的。

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

使用道具 举报

38#
发表于 6-12-2010 15:03:33 | 只看该作者
剛發現這個論壇, 沒想到這里也有搞 iOS 開發的童鞋

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

评分

参与人数 1威望 +50 收起 理由
coredump + 50 你太有才了!

查看全部评分

回复  

使用道具 举报

39#
发表于 6-12-2010 15:30:17 | 只看该作者
请问楼上的tz, 能不能稍微透露一下收益情况, 正在几个平台之间犹豫....
回复  

使用道具 举报

40#
发表于 6-12-2010 16:37:46 | 只看该作者
原帖由 huazhb 于 6-12-2010 16:30 发表
请问楼上的tz, 能不能稍微透露一下收益情况, 正在几个平台之间犹豫....


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

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

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

评分

参与人数 4威望 +170 收起 理由
procoder + 20 恭喜你!你是我的偶像。
coredump + 50 谢谢分享!
ubuntuhk + 50 欢迎多分享点iOS的开发经验~~
trisun + 50 谢谢分享!

查看全部评分

回复  

使用道具 举报

41#
 楼主| 发表于 6-12-2010 18:19:34 | 只看该作者
原帖由 dr_watson 于 6-12-2010 17:37 发表


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

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

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


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

使用道具 举报

42#
发表于 6-12-2010 19:50:15 | 只看该作者
原帖由 trisun 于 6-12-2010 19:19 发表


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


好的, 有時間一定多來灌水
回复  

使用道具 举报

43#
发表于 6-12-2010 19:59:38 | 只看该作者
原帖由 dr_watson 于 6-12-2010 16:03 发表
剛發現這個論壇, 沒想到這里也有搞 iOS 開發的童鞋

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


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

使用道具 举报

44#
发表于 6-12-2010 20:59:24 | 只看该作者
原帖由 mianwo 于 6-12-2010 20:59 发表

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


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

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

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

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

评分

参与人数 2威望 +90 收起 理由
flyday + 40 你太有才了!
coredump + 50 你太有才了!

查看全部评分

回复  

使用道具 举报

45#
发表于 8-12-2010 08:49:27 | 只看该作者
原帖由 dr_watson 于 6-12-2010 21:59 发表


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


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

使用道具 举报

46#
发表于 14-12-2010 15:17:58 | 只看该作者
我的第一个iphone应用今天通过审核上线了


名字叫GyroSurveyor

评分

参与人数 2威望 +90 收起 理由
flyday + 40 恭喜你!
coredump + 50 恭喜你!

查看全部评分

回复  

使用道具 举报

47#
发表于 14-12-2010 19:45:29 | 只看该作者

回复 #46 mianwo 的帖子

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

使用道具 举报

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

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

使用道具 举报

49#
 楼主| 发表于 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 功能主要在于引路蜂地图开发包支持多种地图类开型,离线地图,并可校正中国地图偏移等等

评分

参与人数 1威望 +50 收起 理由
coredump + 50 你太有才了!

查看全部评分

回复  

使用道具 举报

50#
发表于 31-12-2010 19:10:08 | 只看该作者
这个不就是谷歌地图么?

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

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

HAPPY NEW YEAR
回复  

使用道具 举报

51#
发表于 2-3-2011 14:09:00 | 只看该作者
上来更新一下

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


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

评分

参与人数 2威望 +70 收起 理由
woailvzi + 20 恭喜你!
coredump + 50 你太有才了!

查看全部评分

回复  

使用道具 举报

52#
发表于 3-3-2011 14:39:53 | 只看该作者
同在澳洲做iphone 开发的来报个到,dr watson是 cocoaChina上的dr watson吗?
回复  

使用道具 举报

53#
发表于 4-3-2011 08:26:19 | 只看该作者
原帖由 smnox 于 3-3-2011 15:39 发表
同在澳洲做iphone 开发的来报个到,dr watson是 cocoaChina上的dr watson吗?


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

使用道具 举报

54#
发表于 4-3-2011 12:38:21 | 只看该作者
原帖由 mianwo 于 4-3-2011 09:26 发表


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

我在悉尼
回复  

使用道具 举报

55#
发表于 16-4-2011 23:32:47 | 只看该作者
我来报个名,我在国内做ios一年左右,刚准签的176,墨尔本未来的菜鸟新移民,希望能够认识大家。

我的网站:ciderstudios.com
回复  

使用道具 举报

56#
发表于 18-7-2011 21:53:58 | 只看该作者
原帖由 trisun 于 2-11-2010 00:03 发表
用 Objective C正是要有耐心  ,一个简单的 字符相加都很麻烦
NSString 都不支持 “+”

“A" + "B" + "C" +"D"
要写成 [NSString stringWithFormat"%@%@%@%@",@"A",@"B",@"C",@"D"]
NSMutableString* re ...


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

使用道具 举报

57#
发表于 18-7-2011 22:12:26 | 只看该作者
原帖由 dr_watson 于 6-12-2010 20:59 发表


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


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

评分

参与人数 1威望 +20 收起 理由
flyday + 20 我很赞同!

查看全部评分

回复  

使用道具 举报

58#
发表于 1-8-2011 23:15:33 | 只看该作者
我的IPAD上也有 IFLIGHTER 1945
还是限免的
回复  

使用道具 举报

59#
发表于 1-8-2011 23:21:58 | 只看该作者
上面这么多的IPHONE才人, 不知道谁有兴趣开发一个小 APPS?
我有一个粗略的方案

***查过 APPLE STORE, 没有我要的
回复  

使用道具 举报

您需要登录后才可以回帖 登录 | FreeOZ用户注册

本版积分规则

小黑屋|手机版|Archiver|FreeOZ论坛

GMT+10, 20-4-2024 07:36 , Processed in 0.073167 second(s), 58 queries , Gzip On, Redis On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表