【IT168 技术】这是一份iPhone软件开发应急指南,其目标读者主要是有一定iPhone开发经验的人员,因此本文的行文风格将以要点式的方式列举出各种应急情况下的对策,大家都是专家就不说废话了。
硬件
·你必须使用一台Mac(确切地说是Inte·Mac,PowerPC Mac不支持iPhone开发)开发iPhone应用程序,目前有人正在破解,试图在PowerPC Mac进行iPhone开发,建议大家还是直接使用Inte·Mac省事,所有新产的Mac都是基于Intel的了。
·需要iPhone SDK,当你在iPhone开发者网站(链接:http://developer.apple.com/iphone)注册一个用户就可以免费获得了。
·如果你有一部iPhone或iPod Touch就更方便了,如果没有也不打紧,还可以使用SDK中的iPhone模拟器。
·Xcode(iPhone开发IDE)默认与Eclipse的UI风格相似,但它的文档浏览器是独立的窗口,当然也可以把那些标签式的窗口拆分成独立的窗口,如果你很大的显示器或有两台显示器就可以这么干,Mac是支持多台显示器显示不同的窗口内容的。
开发环境
·必须使用Xcode作为IDE,不过可以选择一个外部编辑器编辑源代码。
·Xcode内置了帮助和API列表,在帮助菜单下点击文档即可打开它。
·它也有一个研究助手功能,显示类名或类型的相关信息,如果有类似的例子,它还会给出例子链接。
·在类或函数上按住Alt键然后双击就会打开相关的文档。
·在类或函数上Apple/命令加双击就会跳转到对应的定义位置。
·按ESC键自动退出,如果必要将会弹出一个选项窗口。
·具有图形调试器(图形化gdb),还有一个工具叫做Instruments,它可以检查文件访问,内存使用,以及性能。
·Xcode为Subversion,CVS和Perforce提供了本地化GUI支持,当然你也可以使用任何SCM系统,Xcode不会对这些SCM系统隐藏的文件产生任何破坏。
编程语言
·必须使用Objective-C语言。
·它就是C,只不过添加了一些东西而已,从字面上理解就是使用了更高档的预编译程序和运行库。
·Objective-C语法看起来有点古怪,但只是视觉上不同,Java中的“receiver.doThing(foo, bar, baz)”在ObjC中就是“[receiver doThingWithFoo:foo andBar:bar andBaz:baz]”。
·Objective-C将函数名拆分成片段,使用真实的参数散步这些片段,因此阅读起来更像句子,看起来很冗长,但更具说明性,还有自动完成功能帮助完成输入。
·因为它是基于C的,所以对象类型不会象Java中那样有自动指针,指针必须自动手工创建,就像在声明对象时在类名和变量名之间放一个星号那样简单。
·由于其隐藏了某些复杂的东西,有时让人头痛,不得不去思考它究竟是如何工作的,关于C中指针语法在网上已有很多教程资源,有时间自己去看看。
·如int等原语工作机理和C一样。
·如果你想使用圆点记号访问实例变量,之需要事先为那个实例变量声明一个属性即可,请参考关于属性的文档。
·访问属性实际上是调用对象上自动产生的getter和setter函数,你也可以覆盖这些函数。
·有一些特殊的事情你需要知道:
1、可以通过supper调用超级类的实现;
2、Self和Java中的this相当;
3、可以使用_cmd为当前函数访问选择器(selector,函数名);
4、最后两个是隐藏参数。
·字符串,大约99.99999%的时间你都想使用NSString对象代替原始的C字符串,在Objective-C中,只要在字符串前增加一个@符号就可以让字符串变成NSString了,如@"this"。
应用程序框架
·有两个框架可以选择:UIKit和Foundation。
·它们不是Cocoa(等同Mac桌面开发,由AppKit和Foundation组成),但它们的关系非常接近,在许多情况下几乎就是复制品一样,如果你正在查看在线文档,一定要看看Foundation的iPhone版本,而不是Cocoa(Mac)版本。
·可视化组件(包括窗口,视图,按钮,表等)名字通常以UI开头,如UIButton,UIWindow。
·非可视化的东西通常以NS开头,包括对象类型,如NSString,NSNumber,NSArray,NSDictionary等。
·默认情况下数据结构有约定是不可编辑的,如果你想要进行编辑,那么它必须要有可编辑的子类,这些子类的名称通常都类似于NSMutableArray,NSMutableDictionary等,你可以在不可编辑的版本上调用mutableCopy复制一份可以编辑的拷贝,但这样做的时候要注意内存管理规则,下面会详细介绍内存管理。
保存和载入
·为了保存参数设置,请查看NSUserDefaults。
·为了保存文件,请查看NSDictionary读写XML属性列表(保存基本的数据结构,包括标准对象类型)的功能,或者查看NSData(用于更复杂的或自定义对象)。
内存管理
·需要手动管理内存,没有垃圾回收器。
·有一些简单的规则和约定(链接:http://developer.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html),无论何时都需遵守,不能有例外。
·关于内存管理你必须多读文档,在http://memo.tv/memory_management_with_objective_c_cocoa_iphone也有一个很好的教程。
·不要把它弄得比实际情况更艰难了。
GUI编程
·有一个很好的GUI生成器叫做Interface Builder,包含在Xcode中,当人们提到IB时就指的是Interface Builder。
·你也可以自行进行GUI编程,或者混合这两种技术使用,没有一种方法是完美的,IB也仅仅是一个工具。
·Interface Builder产生的文件叫做nibs,真实扩展名通常是xib,但也可以是nib,xib比nib格式更新。
·代码可以通过outlets连接到IB创建的GUI。
·IB创建的GUI可以通过actions连接到代码。
·为了产生连接,在nib文件中需要有一个类的实例,如果不存在,从库中拖一个黄色的对象立方体,然后使用Inspector进行修改即可。
·可以在Interface Builder上点击右键拖动创建连接,也可以点击右键查看和修改对象的连接。
·Nib文件中的UI和规范和模板不同,它也不是代码生成的,它是一个对象的实例,连续装入到文件中后又进行载入,这些是真实的对象。
·第一个nib是通过UIApplication类载入的,它的名字来自于项目中的一个属性列表文件,其它nib也可以这样载入。
调试
·Xcode中有一个图形化的gdb,gdb是最常用的C调试器。
·使用NSLog()功能,和Java中的System.out.println类似,它需要一个NSString,因此看起来就像NSLog(@"Hello World!");。
·你可以放入一些printf格式的字符进去,在字符串后增加相关的变量,语法和printf相同,如NSLog(@"You are %d years old", age);。
·可以使用%@格式字符输出随机对象类型,许多具有层次的数据结构如NSArray和NSDictionary将会自动打印。
·-(NSString *)description相当于Java中的String toString(),UIKit和Foundation中的许多类提供了有帮助的默认实现,根类的实现只是简单地打印对象的类名和在内存中的地址。
·控制台输出是在Xcode内显示的,也可以显示在一个独立的窗口中,这就看你是如何设置Xcode的了。
使用iPhone模拟器
·模拟器包括在iPhone SDK中。
·在模拟器中运行的速度更快,因此不要用模拟器来评估性能。
·并不能模拟真实设备的一切功能。
·未经测试不要将应用程序提交到应用程序商店。
·在模拟器中键盘负责输入文字,鼠标负责点击和拖放,按下Alt键可以模拟两个手指的输入。
·模拟器有菜单命令旋转设备到水平方向,也可以旋转到纵向,也可以模拟一个内存警告(没有垃圾回收器,你记住了吗?)。
部署到设备
·你必须有一个证书签署你的代码,以便它能够在设备上运行。
·经过苹果公司的审核后,你开发的程序就部署到应用程序商店了。
·创建这个证书你得每年支付99美元的费用。
应用程序商店入门
·如果你还没有签约成为一个付费的iPhone开发人员,那么现在开始注册吧,只有注册后才能获得证书的。
·不要等到程序都开发好了才去注册,这需要一段时间的。
·你必须提供各种信息才能进入苹果的分销合同,苹果将会把30%的利润返给你。
·给自己至少数天来做这些事情。
·在苹果批准你的应用程序之前,你的程序不能进入应用程序商店,花的时间不定,目前大约需要1-2周,你不能加快这个进程,你要做的只有等待。
·每次你对已经发布到应用程序商店中的程序进行更新时也需要苹果公司的审核才行。
·你的应用程序将被真正的人类运行。
·如果你的应用程序遭到拒绝,它会告诉你原因,你可以有针对性地做出修改然后再提交。
获得更多帮助
·阅读官方文档,有入门指南,也有原始的API文档,这些文档在iPhone开发者网站都是有的。
·查看苹果提供的示例代码。
·搜索官方论坛,如果必要可以发帖求助。
·也可以试试第三方论坛。
·使用Google,可能已经有人遇到同样的问题并记录到博客中了。
·买一本书看,到目前为止已经有几本可以看的书了,查看Amazon上的评论,看看哪本值得下手。
在寻求帮助时请遵循一般性原则:
·请不要在本文后面提问,这里不是论坛,此外,也不要向我发送求助的电子邮件。
·在提问前你是否做过相关的研究,先努力自己解决看行不行。
·如果你来自另一个平台,可能需要花点时间来熟悉iPhone世界的新术语。
·提问简明扼要,但要表达清楚。
·注意礼貌和尊重别人,这样你会得到更多更好的答案。
最后说明
在学习一个新的开发平台时,在前进的道路上总会遇到一些挫折,请记住下面这两句真理:
·这也许不是设计不当,可能是还没有熟悉的缘故。
·你可能并不笨,只是暂时缺乏经验而已。
请铭记这些忠告。