作为一名经验丰富的PHP开发人员,并且对C(使用16位我爸爸的NEC微控制器进行分布式计算实验)有了一个公平的知识,我想转向Objective-C和Cocoa,最终目标是将Mac / iPhone应用程序与我的一些PHP项目集成。

通过“适用于Mac OS X的Cocoa编程”由Arron Hiilegass写的,我有点沮丧。我能够处理这些例子,但他并没有完全解释为什么他正在以这种方式使用类(例如,NSNumber而不是int或double)。

我正在寻找一本优秀的书籍,以便首先使用Objective-C。我的问题是,什么是好书?我在看“在Objective-C 2.0中编程”。它看起来很不错。我从哪里去?我想我应该重新开始我的Cocoa书。

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

反正。谢谢您的帮助! (我只有14岁,所以如果我在我的Q中犯了任何错误,请继续对我说。)

有帮助吗?

解决方案

我刚刚完成了“在Objective-C 2.0中编程”。我自己,这很不错。我推荐它,特别是如果你从未使用过C(或者如果你忘了它,就像我一样)。

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

其他提示

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

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

NSNumber 比基本类型(如 int double )更有用,因为它经常被使用与您在Cocoa中编程时遇到的其他对象一起使用。

例如,为了将数字作为值打包到可调整大小的数组(如 NSMutableArray )或关联数组( NSDictionary ),您需要将数字原语( int double 等)转换为 serializable ,or archivable object—一个 NSNumber

NSNumber 不同,

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

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

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

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

根据我的经验,我发现互联网文档对于学习Obj-C和CocoaTouch非常有帮助。我的进展是这样的:

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

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

3)阅读 OOP in Obj -C

4)阅读更多内容: Cocoa基础知识 Objective-C入门 Cocoa Practices

5)做一些简单的教程。

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

你必须记住,学习曲线在这里非常大。这对我来说,我每天都在大学里学习这样的事情。所以,坚持下去并以聪明的方式阅读(你知道的浏览内容)。我自己看到的是,如果我了解iPhone的工作方式并了解数据流,那么对它进行编程主要是语法问题。

PHP与Objective-C非常不同。此外,在因特网环境中用PHP解决编程问题的方式与在iPhone环境中在Obj-C中解决编程问题的方式有很大不同。因此,您希望从新的角度来看待iPhone,并作为学生/学习者。花点时间专注于面向对象的编程和最佳实践。这将在未来几年祝福你。

-Buffalo

另外,回答你的问题:

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

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

NSNumber是一个Objective-C类,它表示一个数字PLUS对该数字(方法)的许多操作。使用NSNumber而不是数字基元类型的优点是它可以以面向对象的方式使用(您可以向其发送消息,您可以使用“协议”扩展其功能,您可以继承它,您可以在一个期望对象等的方法中传递它。

对于NSMutableArray,这是一个提供类似数组功能的类。它被设计为使用Objective-C对象类型(它是NSObject类型对象的容器和从它们继承的对象),这就是它不能包含整数的原因。但是,它可以包含一个NSInteger,它是一个表示整数的Objective-C类。

我在类似的船上(PHP转向Objective-C),我发现最好的过程是跳进一个项目。我也阅读了Hillegass的书,这是一个很好的开始,但了解一种语言的唯一方法就是让目标明确。

这很痛苦但是有效。咖啡,原料药和面巾纸。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top