我想在OSX和iPhone上做一些开发.我多年来一直是.Net/C#开发人员.我想知道是否有任何人在两个平台上都有经验可以告诉我他们如何比较和对比.我想知道我前面有什么样的学习曲线.
谢谢,
杰夫
首先是坏事:
我在XCode中做了一些Cocoa开发.您会注意到的第一件事是IDE(XCode)不像Visual Studio那样直观或一般都很好.在XCode工作时,我真的很想念intellisense.苹果开发者可能会对我的声明进行投票.但是来自.Net环境,这才是我真正想念的.所以不要把你的期望定得太高,你也不会太失望.我不是试图运行XCode,它只是不如Visual Studio.
现在好了:
Cocoa项目的一般架构非常好.我希望.Net Winforms和WPF像Cocoa项目一样开箱即用MVC.只要你遵循MVC模式,你应该对你的项目做得好.我所做的一切都在目标C中.你可能会拿起一本书.我为Mac OS X购买了Cocoa Programming并认为它非常好.如果你的背景中有任何C,它看起来会非常熟悉.从C#的角度来看,类的点符号被替换为类似于Tcl的消息发送符号.
将iTunes加载到您的计算机上并下载iTunes U下的iPhone开发视频.您还需要在Apple注册开发人员计划,并为iPhone下载XCode的额外位.
希望有所帮助.我绝不是专业的Cocoa开发人员.
自beta 1以来,我一直在使用C#和.NET进行专业开发.XCode IDE与Visual Studio完全不同.最初你会感到非常困惑和失落.我仍然没有完全满意的UI(亲爱的上帝给我一个解决方案管理器窗口并杀死这个分屏幕垃圾),但是在任何时候你都会像在Studio中一样高效和快速.虽然我更喜欢MSDN中的布局,但文档具有可比性.
至于Cocoa,它作为GUI工具包通常比.NET更容易使用.如上所述,它有一种不同的心态,但是一旦你绕过它,你就会挖它.
虽然它与iPhone不相关,但Mac和iPhone开发之间有许多相似之处.你会帮自己买一本最新版的Aaron Hillegass OSX书.它几乎是编写任何Cocoa软件的事实指南.
总而言之......你最初会非常迷茫和困惑,但是它的价值很难实现.
如果您有一些Cocoa/Objective-C背景,那么您可以在Dave Mark和Jeff LaMarche的"Beginning iPhone Development"的帮助下进入iPhone开发:
http://www.amazon.com/dp/1430216263/
这很容易理解,但是作者假设了一些Objective-C的先验知识(如封底所述),所以我建议从Aaron的"Cocoa Programming for Mac OS X"的前五或六章开始. Hillegass,正如之前的其他人所指出的那样.
http://www.amazon.com/dp/0321503619/
自从他在NeXT的日子以来,Aaron一直在使用和教授Objective-C和现在与Cocoa相关的框架.材料非常非常好.
虽然大部分开发技术同样适用于Mac和iPhone,但某些技术仅适用于Mac(例如,垃圾收集,绑定,核心数据),而某些技术仅适用于iPhone(例如,一个操作的多个目标) ).
如果你想快速掌握iPhone开发并且你愿意投入一些现金,Aaron的团队也可以通过Big Nerd Ranch的课程教你一周内需要知道的一切.(iPhone类总是快速填充,但如果你碰巧在硅谷,1月份"通勤者的iPhone"仍有空间.)
http://www.bignerdranch.com/
(单击" 类"选项卡以获取内容和时间的计划,包括Ruby,Android等.)
虽然我个人更喜欢上面的选项,但当然也有一些免费的在线选项.Scott Stevenson在Cocoa/Objective-C教程中投入了大量精力:
http://www.cocoadevcentral.com/
斯坦福大学开设了苹果工程师教授的Mac开发和iPhone开发课程,并在网上发布了课程资料:
Mac:http ://www.stanford.edu/class/cs193e/
iPhone:http ://www.stanford.edu/class/cs193p/
最后,使用Windows后台进入Mac/iPhone开发的开发人员似乎试图避免使用Interface Builder(IB),而是在代码中构建UI.我理解为什么 - IB没有列出一个很好的代码清单中发生的一切 - 但我强烈建议不要采用这种策略.
Mac/iPhone的开发就是尽量减少代码.你必须编写的代码越少,你需要维护的越少,错误的可能性就越小.IB非常适合最小化UI所需的代码.
您的C/C#背景将为您提供良好的服务.你会发现Objective-C起初看起来很奇怪,但我怀疑你会欣赏它的优点,你很快就会发现它.与C++不同,它实际上非常简单.
我只是把它标记为最喜欢的,因为我希望更多的.NET + Cocoa家伙可以加入.我刚刚开始(再次)使用Cocoa,我到目前为止还喜欢它.(这有助于我正在使用10.5,它允许垃圾收集作为选项.)
到目前为止我注意到的一些最大的差异:
是的,XCode与Visual Studio非常不同.其他人可能会嘲笑"分屏"的性质,但是一旦我把大脑包裹起来,我发现它非常直观.也许我在这里给出的最大建议是自定义工具栏,添加"编辑器"按钮,并使用所述按钮进行代码编辑.
消息语法感觉不熟悉,但我怀疑是因为我不是来自Smalltalk背景.(我听说 - 虽然我没有证实这一点 - 概念非常相似.)显然,从10.5开始,点符号和属性的概念已被添加,但Hillegass建议反对它们.我说做任何感觉都是对的.(我在书中还没有那么远,我自己......)
出于所有意图和目的,该语言是无类型的.这里的优点是您可以实际修改框架类以满足您的需求,并且消息将在运行时得到解决,从而为您提供更多自由.缺点是您可能在运行时之前找不到错误,并且许多错误的行为与.NET异常的行为不同 - 也就是说,当您无法捕获它们时,其中许多错误不会导致完整的应用程序暂停.(不可否认,有@throw
关键字;我还没有到达那里.:))另一个骗局是Obj-C的null
(nil
)概念可以接收消息 - 也没有NullReferenceException
概念.这两者都可能导致调试问题.
与WinForms/WPF/ASP.NET设计者相比,Interface Builder是一个全新的野兽.存档整个用户界面并让它不是代码的概念是我们许多.NET员工要掌握的难题之一.它没有错,但我们需要了解它.
垃圾收集.从10.5开始,Cocoa和Objective-C都支持引用计数(retain
/ release
/ autorelease
)内存管理和自动垃圾收集.刚刚开始工作,我无法详细说明其中的任何一个,但是当GC更易于使用时,您必须在目标选项中手动指定它 - 而您的应用现在需要10.5或更高版本才能使用跑.此外,即使使用GC,最好的做法nil
是在完成操作时手动设置指针,向GC提示他们可能已准备好收集.不像.NET那么透明.(再次,不错,只是不同.要知道的事情!)
我绝不是专家.我自己(再次)开始沿着这条路走下去.不过我喜欢它,我怀疑如果像我这样的核心微软开发人员能够挖掘它,其他人也可以.
最后,几个月前我发现了.NET Addict博客.作者同时做了.NET和Cocoa,并且有几个帖子讨论了这些差异.强烈推荐.