Java 开发人员在 Mac OS 上遇见 Objective-C

2024-05-07

很多年前我就用 C++ 进行过开发,但现在我主要是一名 Java 软件工程师。鉴于我拥有一部 iPhone,准备下个月购买 MacBook,并且总体上对开始 Mac OS 开发(使用 Objective C)感兴趣,我想我应该提出这个问题:下一步做什么?

更具体地说,我应该选择哪些书籍,以及有人可以向我推荐哪些网络资源吗?我打算购买的一些书:

  • Objective-C 2.0 编程 https://rads.stackoverflow.com/amzn/click/com/0321566157
  • Mac OS X 的 Cocoa(R) 编程(第三版) https://rads.stackoverflow.com/amzn/click/com/0321503619

有人熟悉这些标题吗?最后,我非常有兴趣总结一下,一旦我踏上这段旅程,我应该准备好期待什么。作为使用 IntelliJ IDEA 进行 Java 开发的人,当我转向在 Xcode 中编写 ObjectiveC 代码时,我会注意到哪些关键差异? Mac OS 桌面开发和 iPhone 开发有什么区别?习惯了 Java 垃圾收集,我应该了解 ObjectiveC 垃圾收集/内存管理的哪些知识。有人想指出任何其他语言特定问题吗?构建 UI 怎么样?它更接近于 Swing,构建与代码交互的 Visual C++ 资源文件,还是更像一些为 guis 生成代码的 borland IDE?


购买了您问题中的两本书后,我推荐 Cocoa Programming for Mac OS X 作为学习该语言和 Cocoa 框架的快速方法,并且可能是开始在 Cocoa 中生成实际应用程序的最快方法。我强烈推荐它。 《Objective-C 2.0 编程》是一本很棒的参考书,但如果您已经了解 C,那么它所教给您的东西就没有您无法从其他书中学到的东西。然而,如果您需要 Objective-C 中所有保留关键字的列表,那么这本书就是您的最佳选择。

所有的用户界面都可以通过编程方式生成,但是您会发现使用 XCode 附带的 Interface Builder 来布局用户界面要容易得多。您最终会得到更少的代码。通过绑定,您甚至可以消除与界面布局不直接相关的代码。详细信息请参阅《Cocoa Programming for Mac OS X》一书。

我对 Java 怀念的一件大事就是集合 API。在 Cocoa 中,您只获得 NSSet、NSArray 和 NSDictionary,并且没有与 Comparable 接口类似的东西。这些类也是不可变的,但有可变版本,例如 NSMutableArray。

实际上我还没有玩过 Objective-C 2.0 中的垃圾收集。在 Objective-C 的早期版本中,内存管理是通过保留、释放和自动释放方法来处理的。创建对象时保留计数为 1。保留会增加该计数,释放会减少该计数,而自动释放对象则稍微复杂一些。 Cocoa 编程书再次对此进行了很好的解释。垃圾收集是一个选项,如果它打开,retain、release 和 autorelease 方法不会执行任何操作。但是,如果您正在编写供其他人使用的库或框架,则应该像关闭垃圾收集一样对其进行编程。这样,无论应用程序是否打开垃圾收集,都可以使用它。

至于网络资源,http://cocoadevcentral.com/ http://cocoadevcentral.com/是一个提供初学者教程的很棒的网站。 CocoaDev 维基位于http://www.cocoadev.com/ http://www.cocoadev.com/包含很多主题的详细信息,你通常可以在 cocoa-dev 邮件列表上找到一些有用的信息和人员http://lists.apple.com/mailman/listinfo/cocoa-dev http://lists.apple.com/mailman/listinfo/cocoa-dev

iPhone 的开发略有不同,细节受到 NDA 的限制。但是,如果您获得 Apple 批准访问 iPhone 开发人员中心,Apple 提供了一些有关差异的精彩视频概述,这些视频可为您提供从 Mac OS X 跳转到 iPhone OS X 编程所需的文档。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 开发人员在 Mac OS 上遇见 Objective-C 的相关文章

  • Java直接内存:在自定义类中使用sun.misc.Cleaner

    在 Java 中 NIO 直接缓冲区分配的内存通过以下方式释放 sun misc Cleaner实例 一些比对象终结更有效的特殊幻像引用 这种清洁器机制是否仅针对直接缓冲区子类硬编码在 JVM 中 或者是否也可以在自定义组件中使用清洁器 例
  • 识别 Visual Studio 中的重载运算符 (c++)

    有没有办法使用 Visual Studio 快速直观地识别 C 中的重载运算符 在我看来 C 中的一大问题是不知道您正在使用的运算符是否已重载 Visual Studio 或某些第三方工具中是否有某些功能可以自动突出显示重载运算符或对重载运
  • Java中未绑定通配符泛型的用途和要点是什么?

    我不明白未绑定通配符泛型有什么用 具有上限的绑定通配符泛型 stuff for Object item stuff System out println item Since PrintStream println 可以处理所有引用类型 通
  • IQueryable 单元或集成测试

    我有一个 Web api 并且公开了一个端点 如下所示 api 假期 name name 这是 Web api 的控制器 get 方法 public IQueryable
  • 是什么导致了这个 iPhone 崩溃日志?

    我有点卡住了 需要解决这个问题 因为我的一个应用程序出现了随机崩溃 而这些崩溃并不总是能够重现 这是崩溃日志之一 Incident Identifier 59865612 9F00 44EA 9474 2BF607AD662E CrashR
  • 如何在 C 中安全地声明 16 位字符串文字?

    我知道已经有一个标准方法 前缀为L wchar t test literal L Test 问题是wchar t不保证是16位 但是对于我的项目 我需要16位wchar t 我还想避免通过的要求 fshort wchar 那么 C 不是 C
  • 为什么我的单选按钮不起作用?

    我正在 Visual C 2005 中开发 MFC 对话框应用程序 我的单选按钮是 m Small m Medium 和 m Large 它们都没有在我的 m Summary 编辑框中显示应有的内容 可能出什么问题了 这是我的代码 Pizz
  • C++ int 前面加 0 会改变整个值

    我有一个非常奇怪的问题 如果我像这样声明一个 int int time 0110 然后将其显示到控制台返回的值为72 但是当我删除前面的 0 时int time 110 然后控制台显示110正如预期的那样 我想知道两件事 首先 为什么它在
  • 在屏幕上获取字符

    我浏览了 NCurses 函数列表 似乎找不到返回已打印在屏幕上的字符的函数 每个字符单元格中存储的字符是否有可访问的值 如果没有的话Windows终端有类似的功能吗 我想用它来替换屏幕上某个值的所有字符 例如 所有a s 具有不同的特征
  • 使 Guid 属性成为线程安全的

    我的一个类有一个 Guid 类型的属性 该属性可以由多个线程同时读写 我的印象是对 Guid 的读取和写入不是原子的 因此我应该锁定它们 我选择这样做 public Guid TestKey get lock testKeyLock ret
  • 将 JTextArea 内容写入文件

    我在 Java Swing 中有一个 JTextArea 和一个 提交 按钮 需要将textarea的内容写入一个带有换行符的文件中 我得到的输出是这样的 它被写为文件中的一个字符串 try BufferedWriter fileOut n
  • WebBrowser.Print() 等待完成。 。网

    我在 VB NET 中使用 WebBrowser 控件并调用 Print 方法 我正在使用 PDF 打印机进行打印 当调用 Print 时 它不会立即启动 它会等到完成整个子或块的运行代码 我需要确保我正在打印的文件也完整并继续处理该文件
  • C++ new * char 不为空

    我有一个问题 我在 ASIO 中开发服务器 数据包采用尖头字符 当我创建新字符时 例如char buffer new char 128 我必须手动将其清理为空 By for int i 0 i lt 128 i buffer i 0x00
  • String.Empty 与 "" [重复]

    这个问题在这里已经有答案了 可能的重复 String Empty 和 有什么区别 https stackoverflow com questions 151472 what is the difference between string
  • KeyPressed 和 KeyTyped 混淆[重复]

    这个问题在这里已经有答案了 我搜索过之间的区别KeyPressedand KeyTyped事件 但我仍然不清楚 我发现的一件事是 Keypressed 比 KeyTyped 首先被触发 请澄清一下这些事件何时被准确触发 哪个适合用于哪个目的
  • 如何在richtextbox中使用多颜色[重复]

    这个问题在这里已经有答案了 我使用 C windows 窗体 并且有 richtextbox 我想将一些文本设置为红色 一些设置为绿色 一些设置为黑色 怎么办呢 附图片 System Windows Forms RichTextBox有一个
  • 如何减少具有多个单元的 PdfPTable 的内存消耗

    我正在使用 ITextSharp 创建一个 PDF 它由单个 PdfTable 组成 不幸的是 对于特定的数据集 由于创建了大量 PdfPCell 我遇到了内存不足异常 我已经分析了内存使用情况 我有近百万个单元格的 1 2 在这种情况下有
  • Objective-C / C 给出枚举默认值

    我在某处读到过关于给枚举默认值的内容 如下所示 typedef enum MarketNavigationTypeNone 0 MarketNavigationTypeHeirachy 1 MarketNavigationTypeMarke
  • 如何使用 C++11 using 语法键入定义函数指针?

    我想写这个 typedef void FunctionPtr using using 我该怎么做呢 它具有类似的语法 只不过您从指针中删除了标识符 using FunctionPtr void 这是一个Example http ideone
  • JAVA - 如何从扫描仪读取文件中检测到“\n”字符

    第一次海报 我在读取文本文件的扫描仪中读取返回字符时遇到问题 正在读取的文本文件如下所示 test txt start 2 0 30 30 1 1 90 30 0 test txt end 第一行 2 表示两个点 第二行 位置索引 0 xp

随机推荐