.Net家伙需要一些关于Cocoa的信息

时间:2008-11-16 02:42:42

标签: c# .net objective-c cocoa

我想在OSX和iPhone上做一些开发。我多年来一直是.Net / C#开发人员。我想知道是否有任何人在两个平台上都有经验可以告诉我他们如何比较和对比。我想知道我前面有什么样的学习曲线。

谢谢,

杰夫

6 个答案:

答案 0 :(得分:22)

首先是坏事:
我在XCode中做了一些Cocoa开发。您将注意到的第一件事是IDE(XCode)不像Visual Studio那样直观,或者通常很好。在XCode工作时,我真的很想念intellisense。苹果开发者可能会对我的声明进行投票。但是来自.Net环境,这才是我真正想念的。所以不要把你的期望定得太高,你也不会太失望。我不是试图运行XCode,它只是不如Visual Studio。

现在好了:
Cocoa项目的一般架构是非常好。我希望.Net Winforms和WPF像Cocoa项目一样开箱即用MVC。只要你遵循MVC模式,你应该对你的项目做得好。我所做的一切都在目标C中。你可能会拿起一本书。我购买Cocoa Programming for Mac OS X并认为它非常好。如果你的背景中有任何C,它看起来会非常熟悉。从C#的角度来看,类的点符号被替换为类似于Tcl的消息发送符号。

在您的计算机上安装iTunes并下载 iTunes U 下的iPhone开发视频。您还需要在Apple注册开发人员计划,并为iPhone下载XCode的额外位。

希望有所帮助。我绝不是专业的Cocoa开发人员。

答案 1 :(得分:14)

自从测试版1以来,我一直在使用C#和.NET进行专业开发.XCode IDE与Visual Studio完全不同。最初你会感到非常困惑和迷失。我仍然没有完全满意的UI(亲爱的上帝给我一个解决方案管理器窗口并杀死这个分屏幕垃圾),但是在任何时候你都会像在Studio中一样高效和快速。虽然我更喜欢MSDN中的布局,但文档具有可比性。

至于Cocoa,它作为GUI工具包通常比.NET更容易使用。如上所述,它有一种不同的心态,但是一旦你绕过它,你就会挖掘它。

虽然它与iPhone不相关,但Mac和iPhone开发之间有许多相似之处。你会帮自己买一本最新版的Aaron Hillegass OSX书。它几乎是编写任何Cocoa软件的事实指南。

总而言之......你最初会非常迷茫和迷茫,但是它的价值很难实现。

答案 2 :(得分:10)

如果你有一些Cocoa / Objective-C背景,那么你可以在Dave Mark和Jeff LaMarche的“Beginning iPhone Development”的帮助下进入iPhone开发:

http://www.amazon.com/dp/1430216263/

这很容易理解,但作者假设有一些Objective-C的先验知识(如封底所述),所以我建议从“Mac OS X的Cocoa编程”的前五或六章开始“由Aaron 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 ++不同,它实际上非常简单。

答案 3 :(得分:7)

我只是把它标记为最喜欢的,因为我希望更多的.NET + Cocoa家伙可以加入。我刚刚开始(再次)使用Cocoa,到目前为止我还喜欢它。 (这有助于我使用10.5,它允许垃圾收集作为一种选择。)

到目前为止我注意到的一些最大的差异:

  1. 是的,XCode与Visual Studio非常不同。其他人可能会嘲笑“分屏”的性质,但是一旦我把大脑包裹起来,我发现它非常直观。也许我在这里给出的最大建议是自定义工具栏,添加“编辑器”按钮,并虔诚地使用所述按钮进行代码编辑。
  2. 消息传递语法感觉不熟悉,但我怀疑是因为我不是来自Smalltalk背景。 (我听说 - 虽然我没有证实这一点 - 概念非常相似。)显然,从10.5开始,点符号和属性的概念已被添加,但Hillegass建议反对它们。我说做任何感觉都是对的。 (我还没有在书中找到那么远,我自己......)
  3. 出于所有意图和目的,语言是无类型的。这里的优点是您可以实际修改框架类以满足您的需求,并且消息将在运行时得到解决,从而为您提供更多自由。缺点是您可能在运行时找不到错误,并且其中许多错误的行为与.NET异常的行为不同 - 也就是说,当您无法捕获它们时,其中许多错误不会导致完整的应用程序停止。 (不可否认,有@throw关键字;我还没有到达那里。:))另一个问题是Obj-C的nullnil)概念可以接收消息 - 也没有NullReferenceException概念。这两个都可能导致调试问题。
  4. 与WinForms / WPF / ASP.NET设计人员相比,Interface Builder是一个全新的野兽。存档整个用户界面并让它不是代码的概念是我们许多.NET员工要掌握的难题之一。它没有任何问题,但我们需要了解它。
  5. 垃圾收集。从10.5开始,Cocoa和Objective-C都支持引用计数(retain / release / autorelease)内存管理和自动垃圾收集。刚刚开始工作,我无法详细说明其中的任何一个,但是当GC更易于使用时,您必须在目标选项中手动指定它 - 而您的应用现在需要10.5或更高版本才能使用跑。此外,即使使用GC,最好的做法是在完成后手动将指针设置为nil,以向GC提示他们可能已准备好收集。不像.NET那么透明。 (再次,不错,只是不同。要知道的事情!)
  6. 绝不是专家。我自己(再次)开始沿着这条路走下去。我很喜欢它,我怀疑如果像我这样的核心微软开发人员可以挖掘它,其他人也可以。

    最后,几个月前我发现了.NET Addict博客。作者同时做了.NET和Cocoa,并且有几个帖子讨论了这些差异。强烈推荐。

答案 4 :(得分:4)

我在这两方面都很有经验,尽管我在一年左右的时间内没有做过多少C#代码。我从Obj-C到C#,我没有太多麻烦。在我看来,Obj-C代码比C#更加非正式和不那么严格;例如,没有类型化数组,并且在调用对象之前,您不必担心显式检查对象是否为nil / null。一般来说这是一件好事,因为你可以编写更紧凑,更优雅的代码(IMO)。与C#不同的是,你需要知道使用Obj-C的C编程的基本概念,所以如果你生锈的话,你可能想要搞清楚像指针这样的东西。

我认为对于API,您会发现Cocoa更适合桌面应用程序,而不是像.NET那样的企业。例如,.NET有ADO.NET,ReportViewer控件,而Cocoa有Core Data,PDFKit和SearchKit。

答案 5 :(得分:3)

你必须时刻提醒自己,最重要的是Cocoa只是与WinForms 的工作方式不同。你不会在任何地方找到“事件处理程序”,即使你正在寻找一个!并不是说WinForms很糟糕,但Cocoa只是一个不同的范例。