【发布时间】:2011-05-06 18:39:38
【问题描述】:
我想开始学习为 OSX 编程,但只为 iOS 编程。
除了与硬件相关的问题(例如内存、处理能力等)之外,在编程级别上还有哪些显着差异?
在实际的 api 和编程方面,例如鼠标和键盘使用的项目,而不是触摸屏。
我想从有这方面经验的人那里得到一些建议,并且可能是好的书籍链接或教程链接开始。
谢谢
【问题讨论】:
我想开始学习为 OSX 编程,但只为 iOS 编程。
除了与硬件相关的问题(例如内存、处理能力等)之外,在编程级别上还有哪些显着差异?
在实际的 api 和编程方面,例如鼠标和键盘使用的项目,而不是触摸屏。
我想从有这方面经验的人那里得到一些建议,并且可能是好的书籍链接或教程链接开始。
谢谢
【问题讨论】:
让我这样说吧:不要只是尝试将所有东西移植到 Mac 上而不考虑设计原则。许多开发人员正在寻求加入 Mac 开发人员的行列,而无需将时间投入到他们的应用程序中。简单地将应用从 iOS 迁移到 Mac 并不能带来好的界面。
面对现实吧,iOS 是为触摸屏而构建的,而 Mac 不是。因此,简单地转移您的界面可能会奏效,但它不好并且被许多用户所反对。我要做的只是下载一些著名的 Mac 应用程序(演示工作正常),然后研究与 iOS 相比的界面布局。有相似的概念,但差异大于相似之处。
最根本的区别是iPhone上的界面只能有一个窗口,而Mac可以有无限个窗口(理论上)。将所有视图塞入一个窗口并不能在 Mac 上实现。用户已经开始期待多个窗口,老实说,这是一种更好的方法。
所以我的建议是从头开始学习 Cocoa,然后考虑将您的应用程序转移过来......不是通过简单地移植它,而是通过制作一个全新的界面。您的模型仍然可以使用,因为两个平台都使用 Objective-C。
平台如此相似,却又如此不同。 :)
【讨论】:
NSViewControllers 以及如何创建和销毁窗口,就没有那么难了。我学会了爱上 Cocoa Bindings。他们很神奇。 :)
在编写现代 OS X 应用程序时,您通常会使用 Data Binding 将您的模型连接到您的视图,通常是通过像 NSArrayController 这样的通用控制器。
对 Cocoa Data Binding 进行深入了解对于新手来说是一项具有挑战性的任务,起初非常令人沮丧,然后又非常令人兴奋。如果您的主数据绑定可能会从根本上改变您设计软件的方式。
问题是您的 iOS 应用程序在设计时都没有考虑到数据绑定,这是您必须跨越的一座桥梁,才能成为一名快乐且高效的 OS X 开发人员(同时了解各种不同的 SDK 差异)
【讨论】:
我在 2 年前去了另一条路,并且出乎意料地难以搬家。
OS X 更老,并且是在 Objective-C 2.0 之前创建的,因此在旧的 AppKit / CoreFoundation 类中没有太多属性。我的大部分旧 iOS 代码如下所示:
[[self navigationController] popViewControllerAnimated: YES];
UI:大多数响应器/视图/控件层次结构都是相似的,但现在称为 NS(来自 NextStep 的拉丁文)而不是 UI(拉丁文的小屏幕)。
控件:
有点不同,你将一个动作连接到一个控件,控件决定何时发送动作消息,即。滚动条是否设置为连续发送消息。这与 UIkit 的操作方式略有不同,您在其中连接到事件类型:值更改、内部修饰等。
您在 OS X 中获得了不止一个窗口,它为您带来了新的机遇和挑战。您必须更多地担心响应者层次结构。
小事总能吸引你,就像在 UIBezierCurve 中,方法的命名与 NSBezierCurve 略有不同,addLineToPoint: 而不是 lineToPoint:
注意你的编译器警告并拿一本新书,你会没事的。
【讨论】:
这两个平台多年来变得更加相似,许多 OS X API 被迁移到 iOS。我认为主要的区别是 UI 部分。在 OS X 上,您使用 AppKit 而不是 UIKit 来呈现您的 UI。 (尽管您可以同时使用 Interface Builder)。
一些 API 发生了逆转:CoreLocation 曾经是一个仅限 iOS 的框架,现在可以在 OS X 上使用。
其他变化:
根据您的经验水平,我将从 Xcode 中的一些 Apple 提供的 AppKit 示例开始。高温
【讨论】: