FreeOZ论坛

标题: iphone 开发学习笔记 [打印本页]

作者: trisun    时间: 20-10-2010 13:41
标题: iphone 开发学习笔记
iphone 开发学习笔记一
前不久完成了在Java ME,BlackBerry, Android, Java SE, .Net CE, .Net Desktop平台上地图开发包开发工作。终于有时间开始学习Mac OS, iPhone开发。最终目标是将地图开发包移植到Mac OS 和 iPhone平台上。
做软件开发很多年来,一直没有机会接触Mac OS,模糊的印象是用苹果计算机主要是用于图形开发设计:-)。最近开始用iMac,尽管开始有些不习惯,但还是充分感到苹果计算机界面的优美。
先说一下开发iphone应用的一些准备工作。
一台 iMac ,我用的是一台 24 inch All -in -One           价格在 $1600-$2000
一部 iPhone ,                                                            价格 $600-$800
下载并安装 XCode, Interface builder   需要注册一个帐号,才可以在Apple 网站上下载
下载Get Start Video       总长近 20多个小时的教程。对于入门非常有用,每天晚上看3集,一周可看完。
几本人门级的书。
另外,如果打算在Apple Store上发布应用的话,需要每年向苹果缴纳注册费$100.
从移植的角度看,MonoTouch 提供了用于 iphone 的 .NET 开发环境,软件使用许可$399. 经过初步研究,MonoTouch是一个很好的选择,而且它也提供了从C#生产 Object C的工具(还没研究:-)。如果只是在模拟器上运行,可免费使用,如要发布软件,$399还是需要的。
从上看出开发iphone初始投资在$3000左右。
不管是不是使用MonoTouch ,熟悉Mac OS 和 Objective C都是必须的。

[ 本帖最后由 trisun 于 24-10-2010 16:16 编辑 ]
作者: rommi    时间: 20-10-2010 15:20
提示: 作者被禁止或删除, 无法发言 建议看一本书  评价较好的
cocoa programming for mac osx
作者:Aaron Hillegass
作者: trisun    时间: 20-10-2010 15:36
原帖由 rommi 于 20-10-2010 16:20 发表
建议看一本书  评价较好的
cocoa programming for mac osx
作者:Aaron Hillegass


我一般先看一下入门级的书,用于了解一下新的平台。入门级的书一般很便宜,后面一般就不看纸质的书,直接看在线文档了
作者: rommi    时间: 20-10-2010 18:37
提示: 作者被禁止或删除, 无法发言 我在公司做过一些PC往mac方向的移植
不过没有接触过iphone开发
不过 我们不用工具 纯手工移植 c++ mfc代码还好
.net就苦了 先先用native c++重新实现managed code  然后在移到mac上
相当痛苦
作者: ubuntuhk    时间: 20-10-2010 23:52
标题: 回复 #1 trisun 的帖子
我也想捣鼓iPhone/iPad的应用开发,其中成本投入最大的就是iMac/Macbook,经济紧张的同学可以试试PC上装MacOS:
http://bbs.weiphone.com/read-htm-tid-517742.html

我试了一下,可以在X200上装起来,不过显卡和无线网卡的驱动比较麻烦,声卡的驱动应该比较简单,但是作为app开发机,也勉强能用。

当然体验完之后,还是得攒钱买mac
作者: rommi    时间: 21-10-2010 11:23
提示: 作者被禁止或删除, 无法发言 mac 应该还可以吧
毕竟配套送了很多软件
你想想单买一个visual studio就多少钱了
当然咯 这些不适合中国国情
作者: huazhb    时间: 23-10-2010 14:09
呵呵,这两天刚刚在windows7上用虚拟机装了个Mac OS X, 速度还真不错, 正准备捣鼓捣鼓iphone开发呢
作者: trisun    时间: 24-10-2010 15:15
标题: iphone 开发学习笔记二
用于Mac OS 和 iphone 的开发环境主要是XCode 和 Interface Builder ,在XCode 3.0之前,XCode 和 Interface Builder是两个相对独立的应用,一个主要用来编写代码,一个主要用来设计用户界面,从XCode 4.0开始 Interface Builder被集成在XCode中。
再谈谈用于Mac OS 和 iphone 的开发的开发语言 Objective C,这里也不想比较Objective C和其它语言C#,Java的优劣点,不同的人有不同的观点。根据Apple的文档说 Objective C最大的一个特点是动态性能,Dynamic Message Dispacth, Dynamic Binding等等。
这里主要给以熟悉C++,Java,C#语言的开发人员一些提醒,Objective C也是一种面向对象的编程语言,但是它和它的堂兄C++很不相同,更大程序上更象C语言。
1. Objective C仍然大量使用指针,而且很多情况下需要手工管理内存。尽管Mac OS上提供了 Garbage collector, 但在iphone不支持,即使以后支持Garbage collector,Apple 仍然建议使用手机管理内存,理由是更有效。这一点可能对于以前用Java,C#等具有自动内存管理的人可能不同意,毕竟手动管理内存是一个繁琐并且容易造成内存泄露。而硬件功能的越来越强大,完全可以弥补自动内存管理带来的效率问题。
2. Objective C严格意义上讲没有Constructor,但习惯上将以init开头的方法(消息)作为构造函数。dealloc 为析构函数。用于释放内存(常常用于释放类变量等)。
3. Objective C 的方法称为消息,这也是一个Objective C 一个显著特证,如果你看到一个代码中有类似
   [object message] 的代码,基本上可以判断这是一个Objective C代码。
   同样的代码在Java 中
       int age= person.getAge();
   而在Objective C 中
       NSInteger age=[person getAge];
   如果带参数,开始更不太习惯Objective C的语法:-)。
4. Objective C 中没有Namespace 的概念,为避免命名冲突,一般使用前缀,比如 NSString, NS为前缀。可以使用功能或是公司名缩写作为前缀。
5. 对于代码的注释,Objective C 一般还是使用Docxgen来生成代码的文档。
6. Cocoa 和 Cocoa Touch 中提供了Foundation Framework, AppKit, UIKit 接口等使用了Objective C 面向对象的对象接口,但相当一部分API依然是使用C接口,比如Quatz 二维图形库。又比如我打算在Objectivc C中找类似Java 库中 Math类,找了好一会儿没找到,Google 一下,居然还在math.h 和10年前用C 一样 :-)
最后借用Star trek voyager中一句台词“When in Colletive,adapt",如果要开发iphone应用或是Mac 应用,就要适应Objective C ,时间长了就习惯了。而且基本上凡是Java中有的面向对象的概念 ,Objective C也支持,只是以不同的方式来实现的。
Apple的文档和教程写得非常好,这也可以弥补一些开发环境上的不便之处。
作者: rommi    时间: 25-10-2010 17:01
提示: 作者被禁止或删除, 无法发言 你说的没错  obj-c 是一个高度 依靠 run-time binding 的语言
即使类中没写 函数定义  一样可以调用 不会编译出错  只有1个warning
更牛的是 不需要获得原来类的源代码 不需要重新编译  就可以给原有类添加功能
所有函数消息 都是动态榜定的
后果直接导致 运行效率 大大低于 c++


objective 和 c#  java还是有很大区别的
和c++ 相对比较接近  并且大量借用了smalltalk的机制

[ 本帖最后由 rommi 于 25-10-2010 18:07 编辑 ]
作者: trisun    时间: 26-10-2010 11:51
原帖由 rommi 于 25-10-2010 18:01 发表
你说的没错  obj-c 是一个高度 依靠 run-time binding 的语言
即使类中没写 函数定义  一样可以调用 不会编译出错  只有1个warning
更牛的是 不需要获得原来类的源代码 不需要重新编译  就可以给原有类添加功能
所 ...


"更牛的是 不需要获得原来类的源代码 不需要重新编译  就可以给原有类添加功能" 这个其它平台如 .Net 也可以。
我个人并不喜欢Objective C,所谓新出的版本XCode 4.0新的功能在其它平台Visual studio中早就有了,最不方便的是Objective C不支持Name Space,实在不方便,其它的还能忍受 ,但就像回到使用Win32 SDK 的时代。
但苹果不会提供其它开发语言的,而在它的新的开发者协议中 ,居然强制只能使用C,C++,Objective C,颇有XX风格

3.3.1 — Applications may only use Documented APIs in the manner prescribed by Apple and must not use or call any private APIs. Applications must be originally written in Objective-C, C, C++, or JavaScript as executed by the iPhone OS WebKit engine, and only code written in C, C++, and Objective-C may compile and directly link against the Documented APIs (e.g., Applications that link to Documented APIs through an intermediary translation or compatibility layer or tool are prohibited)

[ 本帖最后由 trisun 于 26-10-2010 13:04 编辑 ]
作者: rommi    时间: 26-10-2010 12:16
提示: 作者被禁止或删除, 无法发言 我刚换了台imac 配套的xcode只有3.2.7
有什么超大的改动 到 可以换大序号  难道就是为了迎合iphone 4

mac下开发我遇到的最大麻烦就是内存消耗太大  我们公司源代码量很大  1kw行以上 一开始4g内存 每次ui debug起来 进到db code 必定内存耗尽死机  只能从命令行起gdb  后来加到8g好了点 只有极小模块会死  现在加到12g 好了  基本不死了

在windows下 我也就4g内存  visual studio从来不死

话说回来  不支持namespace 也没什么   一般有点年头的软件公司  都会通过前缀来自动划分空间  比如apple全用NS
作者: mianwo    时间: 26-10-2010 15:58
我最近也在研究iOS开发
买了一部macbook,还有一部ipod touch 4,加起来8000多人刀

macbook印象还不错,电力好,充满电用一个工作日没有问题,屏幕也很好,看着比较舒服。

但软件就不敢恭维了
我用惯了eclipse,目前觉得xcode简直是悲剧。。。
apple的文档比google也差得远了,比方说我想找所有界面控件的文档,Android有User Interface guide,说的比较清楚了,而参考文档只用看android.widget包下面就行了,但iOS开发文档里面竟然没有一个整合介绍所有界面元素的地方,每个文档都是分散的。
另外objective-c的语法也让人觉得有点人格分裂
作者: trisun    时间: 26-10-2010 17:11
"iOS开发文档里面竟然没有一个整合介绍所有界面元素的地方"
有这个文档。
---https://developer.apple.com/libr ... /doc/uid/TP40006955


Apple 的文档还是不错的,特别是视频教程。
作者: rommi    时间: 26-10-2010 17:18
提示: 作者被禁止或删除, 无法发言 谢谢加分

国外情况我不是很清楚
中国目前状况是 mac工程师 需求量不是很大  imac开发的基本没有 90%以上都是iphone
基本以小作坊为主  简单来说都是创业型企业 最多也就10来个人 100人以上的公司我还没见过 还有很多完全是个人 基本依托 appstore

猎头也联系过我 我也面试过几家公司 offer都有 全是做iphone游戏的
我衡量了一下  还是不打算去
原因主要是觉得不稳定 风险较大
作者: mianwo    时间: 26-10-2010 17:33
原帖由 rommi 于 26-10-2010 18:18 发表
谢谢加分

国外情况我不是很清楚
中国目前状况是 mac工程师 需求量不是很大  imac开发的基本没有 90%以上都是iphone
基本以小作坊为主  简单来说都是创业型企业 最多也就10来个人 100人以上的公司我还没见过 还有 ...


是的,加入小作坊还不如自己干呢
我有个同事卖点flash转到iphone平台上的东西,每月也有几百刀收入呢
作者: rommi    时间: 26-10-2010 18:27
提示: 作者被禁止或删除, 无法发言 呵呵 是啊
虽然mac engineer需求量不大 但是我发现企业也很难招到满意的人  
原因我觉得  现在从事mac开发的人绝大部分都是转型而来的  而且大部分人不太愿意冒风险放弃原来的东西
mac 开发大部分人还是愿意把它当作饭后甜点  真正作为主菜的不多

作者: trisun    时间: 2-11-2010 00:03
用 Objective C正是要有耐心  ,一个简单的 字符相加都很麻烦
NSString 都不支持 “+”

“A" + "B" + "C" +"D"
要写成 [NSString stringWithFormat"%@%@%@%@",@"A",@"B",@"C",@"D"]
NSMutableString* result=[NSMutableString new];
[result stringByAppendingString"A" ......]



作者: trisun    时间: 2-11-2010 00:07
标题: 回复 #17 trisun 的帖子
在来个 trim


NSString *retStr=[result2 stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];   
作者: trisun    时间: 3-11-2010 00:31
标题: iphone 开发学习笔记三
经过一段时间的学习,看文档,算是对Mac OS,Objective C有了一些基本的了解,直正要学会iphone 开发还是要通过实战。在选择开发工具,对于选择XCode+Objective C 还是用 MonoTouch 几经反复,经过激烈的心理斗争,最终选择两种都支持 :-). 我的目标是将地图开发包移植到 iPhone (iOS)和 Mac OS上,原始代码是Java 和 C# ,似乎选择 MonoTouch 是个正确的选择,而且事实上.Net 平台上C#代码基本上可以不用修改在MonoTouch 编译通过,移植工作量很小,似乎没什么挑战性。另外经过几周的Objective C和 Cocoa Touch学习,对于开发人员来说XCode+Objecitve C实在不是什么好用的开发环境,Objective C本质上还是C,重新回到用C写代码真是不习惯,满脑的指针又回来。。。
但用MonoTouch 基本上没什么工作量,也就不能较深入的了解iOS,另外用MonoTouch也有两个比较大的缺点:一是编译后可执行程序较大,iphone不带.Net 运行环境,MonoTouch 编译后的程序需要包含MonoTouch运行环境,我查到网上一个资料,一个简单的"Hello world",用Objective C写,最后大约50k,而用MonoTouch大约是5M. 另一个缺点可能是致命的,不是技术上的而是来自Apple限制,Apple在新的开发者协议中明确指出在iphone写程序只能是C,C++,Objective C或是JavaScripts,有点变态的规定,尽管Apple很难强制执行这个政策,但对用MonoTouch开发iphone 4还是一个很大的风险。最终我还是决定两个都支持。其实主要是支持Objective C 接口。MonoTouch 接口支持工作量很小。
下面就说说移植的工作量,在后面的文章中陆续介绍在移植中碰到的问题及解决方法,C#和Objective C是两种异常迥异的语言,.Net Framework 和 Cocoa Touch Framework 也大不相同。移植工作是一个非常有挑战性的工作:)。
下图是引路蜂地图开发包的包之间关系图。其中绿色为对外开放的API.
所用的平台API涉及到 String, Collections ( Array, Hashtable etc) (Util), Network (Http etc) ,Ajax (Json), 文件操作 (RMS),加密解密 (Crypto),二维图形 (Drawing) ,最后是地理信息系统(GIS)。
这些平台API在 .Net Framework 和 Cocoa Touch 实现不同,C#和 Objective C语法不同,都给移植增加了工作量。在之后的文章会慢慢介绍。
作者: ubuntuhk    时间: 3-11-2010 00:35
原帖由 trisun 于 2-11-2010 01:03 发表
用 Objective C正是要有耐心  ,一个简单的 字符相加都很麻烦
NSString 都不支持 “+”

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


哦,卖糕的,简约的iPhone OS/App就是用这么罗嗦的object-c开发的啊?
作者: trisun    时间: 3-11-2010 00:45
原帖由 ubuntuhk 于 3-11-2010 01:35 发表


哦,卖糕的,简约的iPhone OS/App就是用这么罗嗦的object-c开发的啊?


objective-c 本质上还是C,不支持 operator overload 的,如果一直用C开发的话,用objective-c 还比较好,很多年没有用C了,重回到C ,还要重新慢慢适应
作者: rommi    时间: 3-11-2010 19:09
提示: 作者被禁止或删除, 无法发言 写惯.net代码的人 回到C++/obj-c 确实痛苦啊
弄得不好就来一个EXE_BAD_ACCESS
作者: ubuntuhk    时间: 3-11-2010 19:50
原帖由 trisun 于 3-11-2010 01:45 发表


objective-c 本质上还是C,不支持 operator overload 的,如果一直用C开发的话,用objective-c 还比较好,很多年没有用C了,重回到C ,还要重新慢慢适应


我主要用C,看来我应该比较容易适应objective-c
作者: rommi    时间: 4-11-2010 11:31
提示: 作者被禁止或删除, 无法发言 LZ在熟悉 类库之前
最好应该先熟悉一下各种机制  以及 interface builder的使用  这样可以大大简化工作量 并且减少错误
例如 KVC KVO Binding Delegation Notification retain count autoreleasepool responder chain等等
还有xcode自带了很多performance tool 在debug的时候帮助很大

即使精通c++, apple官方的Memory Management Guide文档一定要读一下 否则肯定会经常遇到EXE_BAD_ACCESS  毕竟内存管理方式还是有不同的
作者: mianwo    时间: 15-11-2010 11:39
想请教各位前辈一个问题

我能不能在类定义中加入一个 c 数组作为成员?

比方说
SomeClass.h
--------------------------
@interface SomeClass:NSObject
{
  float matrix[16];
  float *matrix2;
}
-(void)setMatrix: (float *)newMatrix;
@end


SomeClass.m
------------------------

@implementation SomeClass
-(id)init
{
matrix[0] = 1;
matrix[1] = 0;
...
matrix[15] = 1;

//以下我估计是错的,因为函数执行结束的时候 f 分配的内存就没了
float f[] = {1, 0, 0, ...};
matrix2 = f;
}

//这样可能是正确的
-(void)setMatrixfloat *)newMatrix
{
matrix2 = newMatrix;
}
@end


我用惯了Java,从来没有考虑过内存管理的事,以前学的C早忘了
所以现在对objective-c有点困惑

[ 本帖最后由 mianwo 于 15-11-2010 12:44 编辑 ]
作者: rommi    时间: 15-11-2010 12:40
提示: 作者被禁止或删除, 无法发言 obj-c内存管理和 c/c++还有一定区别

栈上控制是一样的

//以下我估计是错的,因为函数执行结束的时候 f 分配的内存就没了
理解正确

堆上不一样
c++ delete以后内存立刻被清掉
obj-c是完全使用 引用记数  release使retain count减1 减到0才会调用dealloc(destructor)并清掉内存

一般使用property 和synthesize来写get/set函数
同时配有3个属性  retain assign copy
retain: 引用记数+1
assign:引用记数不变
copy: 复制一块一样的内存 同样使这块内存的引用记数变成1

//这样可能是正确的
-(void)setMatrixfloat *)newMatrix
{
matrix2 = newMatrix;
}

这里 你想一想  是否变成了2个指针指向同一块内存? 如果newMatrix对应的实参调用release 是否你的matrix2 变成了野指针? 而且外面调用者 不会考虑你是怎么做的 他只会管好他写的代码 所以他alloc出来的东西肯定会调用release

正确写法应该是
-(void)setMatrixfloat *)newMatrix
{
[newMatrix retain];   // 1. 这里你retain住使retain count变成2, 外面release一次变成1, 这时你想要得这块内存并没有被释放
[matrix2 release];    // 2. 这里要清掉你之前指向的内存 因为matrix2之前可能指向别的内存 等于线断了 retain count要减1
matrix2 = newMatrix;  // 3. matrix指向你要得内存 因为你已经retain住了所以不会被释放  但是最后一次release要放在dealloc里面 使你指向的这块内存被释放
}

[ 本帖最后由 rommi 于 15-11-2010 13:45 编辑 ]
作者: rommi    时间: 15-11-2010 12:52
提示: 作者被禁止或删除, 无法发言 顺便建议不要使用c语言数组 (我从来不用)

1. 使用cocoa容器 NSArray NSMutableArray 等等
   注意往容器里面addObject的时候retain count是会自动+1的 removeObject的时候会自动减1
      所以有些东西不能放进cocoa容器 比如你想要一个delegate数组 如果使用NSMutableArray会导致循环引用 结果就是谁都释放不掉

2. 像1中不能放入的建议放入stl容器  因为stl容器不会+1 -1
作者: EnsignKim    时间: 15-11-2010 12:53
原帖由 rommi 于 15-11-2010 13:40 发表
-(void)setMatrixfloat *)newMatrix
{
[newMatrix retain];   // 1. 这里你retain住使retain count变成2, 外面release一次变成1, 这时你想要得这块内存并没有被释放
[matrix2 release];    // 2. 这里要清掉你之前指向的内存 因为matrix2之前可能指向别的内存 等于线断了 retain count要减1
matrix2 = newMatrix;  // 3. matrix指向你要得内存 因为你已经retain住了所以不会被释放  但是最后一次release要放在dealloc里面 使你指向的这块内存被释放
}.


C 指针能用 retain ,release 吗? 我因为只有NSObject 才可以用。
我还是用 malloc ,free.

[ 本帖最后由 EnsignKim 于 15-11-2010 13:54 编辑 ]
作者: mianwo    时间: 15-11-2010 16:08
我用c数组是用来跟open gl打交道,变换矩阵和顶点模型什么的,这样比较方便。可以直接传给opengl函数
作者: mianwo    时间: 15-11-2010 22:39
上来抱怨一下,iOS SDK竟然连求逆矩阵的方法都没有
害得我要把公式翻出来,自己写逆矩阵函数。。。
作者: trisun    时间: 30-11-2010 19:58
标题: 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
标题: 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 语法与之对应。

作者: trisun    时间: 30-11-2010 20:01
标题: 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
我的第一个iphone应用快要完工了,希望本周可以提交
不知到apple审核需要多久...
作者: trisun    时间: 2-12-2010 00:18
原帖由 mianwo 于 1-12-2010 12:33 发表
我的第一个iphone应用快要完工了,希望本周可以提交
不知到apple审核需要多久...


什么应用?发个截图看看,收费应用?
作者: mianwo    时间: 2-12-2010 00:38
是个测量距离的小工具
免费但是带广告

我之前已经有一个android版本,发布在android market上大约1年了,目前一共有23万多下载。
叫Surveyor,如果你有android手机可以下来玩玩
作者: katsura    时间: 4-12-2010 21:13
iPhone gen.1 我就开始搞这个, 到后来还是因为不稳定,转行了。
要赚钱养活自己还是挺难的。

我搞了几个游戏的原型, 后来也没有继续。
作者: dr_watson    时间: 6-12-2010 15:03
剛發現這個論壇, 沒想到這里也有搞 iOS 開發的童鞋

我是專門開發 iOS 遊戲的, 我們公司叫 EpicForce, 在香港注冊, 我在墨爾本家里工作, 已發佈了多個作品.
作者: huazhb    时间: 6-12-2010 15:30
请问楼上的tz, 能不能稍微透露一下收益情况, 正在几个平台之间犹豫....
作者: dr_watson    时间: 6-12-2010 16:37
原帖由 huazhb 于 6-12-2010 16:30 发表
请问楼上的tz, 能不能稍微透露一下收益情况, 正在几个平台之间犹豫....


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

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

當然, 如果你只是當個業餘活動或有信心和時間可以長期作戰, 那 App Store 是個挺不錯的平台!
作者: trisun    时间: 6-12-2010 18:19
原帖由 dr_watson 于 6-12-2010 17:37 发表


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

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

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


有时间介绍介绍你们的应用及iOS开发。
作者: dr_watson    时间: 6-12-2010 19:50
原帖由 trisun 于 6-12-2010 19:19 发表


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


好的, 有時間一定多來灌水
作者: mianwo    时间: 6-12-2010 19:59
原帖由 dr_watson 于 6-12-2010 16:03 发表
剛發現這個論壇, 沒想到這里也有搞 iOS 開發的童鞋

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


敬仰中。。。
我翻了一下,我ipod touch上有你们的iFighter 1945
作者: dr_watson    时间: 6-12-2010 20:59
原帖由 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 编辑 ]
作者: katsura    时间: 8-12-2010 08:49
原帖由 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.
作者: mianwo    时间: 14-12-2010 15:17
我的第一个iphone应用今天通过审核上线了


名字叫GyroSurveyor
作者: ubuntuhk    时间: 14-12-2010 19:45
标题: 回复 #46 mianwo 的帖子
试了一下,我的3GS没办法安装,需要陀螺仪
作者: mianwo    时间: 15-12-2010 01:35
是的,需要iphone4或者ipod touch4
3GS用磁场感应器的数据理论上也可以做到同样的效果,我做的Android版本就是这个原理,可以在绝大多数android手机上运行。
但是我手上只有ipod touch,没有磁场传感器,所以没法测试。以后如果有机会可以为3gs单独做一个版本。

我自己对比,陀螺仪比磁场感应灵敏度和精确度都强太多了。完全不需要过滤,原始数据就相当理想。android版本中用磁场传感器不过滤的话就会有很大的抖动。
作者: trisun    时间: 27-12-2010 17:00
标题: 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
这个不就是谷歌地图么?

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

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

HAPPY NEW YEAR
作者: mianwo    时间: 2-3-2011 14:09
上来更新一下

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


[ 本帖最后由 mianwo 于 2-3-2011 15:11 编辑 ]
作者: smnox    时间: 3-3-2011 14:39
同在澳洲做iphone 开发的来报个到,dr watson是 cocoaChina上的dr watson吗?
作者: mianwo    时间: 4-3-2011 08:26
原帖由 smnox 于 3-3-2011 15:39 发表
同在澳洲做iphone 开发的来报个到,dr watson是 cocoaChina上的dr watson吗?


同行握个手
你在悉尼还是猫本?
作者: smnox    时间: 4-3-2011 12:38
原帖由 mianwo 于 4-3-2011 09:26 发表


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

我在悉尼
作者: chrischen79    时间: 16-4-2011 23:32
我来报个名,我在国内做ios一年左右,刚准签的176,墨尔本未来的菜鸟新移民,希望能够认识大家。

我的网站:ciderstudios.com
作者: woailvzi    时间: 18-7-2011 21:53
原帖由 trisun 于 2-11-2010 00:03 发表
用 Objective C正是要有耐心  ,一个简单的 字符相加都很麻烦
NSString 都不支持 “+”

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


崩溃!对我这种喜欢用Ruby的人来说...
作者: woailvzi    时间: 18-7-2011 22:12
原帖由 dr_watson 于 6-12-2010 20:59 发表


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


太牛了..我的iphone4上也有,正好在限免得时候下的。没想到还能碰到原作者...
作者: flyday    时间: 1-8-2011 23:15
我的IPAD上也有 IFLIGHTER 1945
还是限免的
作者: flyday    时间: 1-8-2011 23:21
上面这么多的IPHONE才人, 不知道谁有兴趣开发一个小 APPS?
我有一个粗略的方案

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




欢迎光临 FreeOZ论坛 (https://hioz.im/ibbs/) Powered by Discuz! X3.2