10

作为一个非常有经验的 PHP 开发人员,并且对 C 有一定的了解(用我父亲的 16 个 NEC 微控制器编写了一个分布式计算实验),我想转向 Objective-C 和 Cocoa,最终的目标是集成 Mac / iPhone 应用程序与我的一些 PHP 项目。

通过 Arron Hiilegass 的“Cocoa Programming For Mac OS X”一书,我有点沮丧。我能够处理这些示例,但他没有确切解释为什么他以这种方式使用一个类(例如 NSNumber 而不是 int 或 double )。

我正在寻找一本好书/书籍来首先学习 Objective-C。我的问题是,什么是一本好书?我正在看“Objective-C 2.0 中的编程”,它看起来相当不错。我会从那里去哪里?我想我应该重新开始我的可可书。

此外,互联网上是否有任何资源可以帮助从 PHP 过渡到 Objective-C?我知道 PHP 是一种松散类型的脚本语言,所以它有其不同之处。有些事情对 Obj-C 和 Cocoa 没有意义,为什么我不能将整数放入 NSMutableArray?

无论如何。谢谢您的帮助!(我才 14 岁,所以如果我在 Q 中犯了任何错误,请放过我。)

4

7 回答 7

8

我自己刚刚完成了“Objective-C 2.0 编程”,它非常好。我会推荐它,特别是如果您从未使用过 C(或者如果您像我一样忘记了它)。

但是,Apple 确实拥有出色的文档。如果你不介意在线阅读,我会从他们的 Cocoa 入门页面开始。

于 2009-05-02T00:07:00.227 回答
7

我能够处理这些示例,但他没有确切解释为什么他以这种方式使用一个类(例如 NSNumber 而不是 int 或 double )......

有些事情对 Obj-C 和 Cocoa 没有意义,为什么我不能将整数放入 NSMutableArray?

NSNumberint是一种比or等​​原始类型更有用的类型double,因为它经常与您在 Cocoa 中编程时遇到的其他对象结合使用。

例如,为了将数字作为值打包成可调整大小的数组(如NSMutableArray)或关联数组( 的实例NSDictionary),您需要将数字原语(intdouble等)转换为可序列化的或可归档的对象——一个NSNumber

基元不能序列化,不像NSNumber, 因为基元不在Apple 努力为您提供的基本“核心基础”类型( NSNumberNSArray、等)中。NSString

此外,通过使用,NSNumber您还可以免费获得许多额外的便利方法:您可以快速将数字转换为字符串,例如,只需键入[myNumber stringValue].

或者,如果您将您NSNumber视为某物的价格(“$1.23”),您可以应用 anNSNumberFormatter以确保对数字的操作给出的结果具有您期望的格式(例如,如果您添加两个价格值,你会期望得到一个货币价值作为回报)。

这并不是说您不能或不应该使用intordouble变量。但在许多情况下,您会发现NSNumber一个更好的选择,因为您可以编写更少的代码并“免费”获得很多功能。

于 2009-05-02T01:04:04.740 回答
5

根据我的经验,我发现 Internet 文档对学习 Obj-C 和 CocoaTouch 很有帮助。我的进步是这样的:

1) 在 iTunes 上观看 Apple Dev 视频(它们是免费的)。

2) 阅读入门iPhone 应用程序编程指南

3) 在 Obj-C 中读取OOP

4) 阅读更多:Cocoa FundamentalsObjective-C PrimerCocoa Practices

5)做一些简单的教程。

IMO:您需要的所有信息都在 Apple Dev:iPhone 网站上。省钱,不要买书。如果您不理解“为什么”在其中一个指南或教程中做了某事,请立即将其与 Google 的其他来源进行交叉引用。

您必须记住,这里的学习曲线非常大。这是给我的,我在大学里每天都在学习这样的东西。所以,坚持下去,以聪明的方式阅读(略读你知道的东西)。我在自己身上看到的是,如果我了解 iPhone 的工作原理并了解数据流,那么为它编程主要是语法问题。

PHP 与 Objective-C 非常不同。此外,在互联网环境中用 PHP 解决编程问题的方式与在 iPhone 环境中用 Obj-C 解决编程问题的方式非常不同。正因为如此,你想从一个新的角度来使用 iPhone,并且作为一个学生/学习者。花点时间专注于面向对象的编程和最佳实践。这将在未来几年祝福你。

-水牛

于 2009-05-03T18:11:13.013 回答
1

另外,回答您的问题:

Objective-C 是一种面向对象的语言,作为 C 的扩展而构建。

因此,它提供原始类型(如 int 和 double)和对象。

NSNumber 是一个 Objective-C 类,它表示一个数字加上对该数字的一些操作(方法)。使用 NSNumber 优于数字原始类型的优点是它可以以面向对象的方式使用(您可以向它发送消息,您可以使用“协议”扩展它的功能,您可以从它继承,您可以通过它在一个需要一个对象等的方法中)。

至于 NSMutableArray,这是一个提供类数组功能的类。它旨在与 Objective-C 对象类型一起工作(它是 NSObject 类型对象和从它们继承的对象的容器),这就是它不能包含整数的原因。但是,它可以包含一个 NSInteger,它是一个表示整数的 Objective-C 类。

于 2009-05-02T00:40:13.703 回答
1

我个人会尝试首先从http://developer.apple.com/library/mac/navigation/上的苹果参考资料中学习 Objective-C,然后从那里继续学习可可。

于 2010-10-10T15:21:17.687 回答
0

我也遇到过类似的情况(PHP 转向 Objective-C),我发现最好的过程是跳入一个项目。我也阅读了 Hillegass 的书,这是一个好的开始,但了解一门语言的唯一方法就是带着明确的目标勉强过关。

这很痛苦,但它有效。咖啡、API 和面巾纸。

编辑:我刚读了你帖子的最后一部分,看到你 14 岁。也许用可乐换咖啡:)

于 2009-05-02T08:26:55.033 回答
0

如果你来自任何地方,我最喜欢的 Objective-C 教程是斯坦福大学关于 iOS 编程的 iTunesU 课程。教授真的从其他书籍和在线教程中看待事物。

于 2012-03-03T15:32:25.140 回答