2009-05-02 12 views
10

作为一个经验丰富的PHP开发人员,并且对C有一个公平的认识(用16位我父亲的NEC微控制器编写了一个分布式计算实验),我想转到Objective-C和Cocoa,最终旨在将Mac/iPhone应用程序与我的一些PHP项目集成。从PHP到Objective-C

通过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中犯了什么错误,那么就轻松点吧。)

+2

对于本书的问题本身并不是一个真正的答案,但是当你学习新的东西时,有问题是很正常的(比如“为什么用X而不是Y?”)。随意问Stack Overflow。这样,其他有相同问题的人可以找到他们已经提出并回答的问题。 – Chuck 2009-05-02 00:37:19

+0

感谢大家的帮助,我希望我能选择1个以上的答案。这是一个非常棒的社区,在学习Obj-C的同时,我敢于尝试我的部分并回馈给PHP部分。 – 2009-05-06 01:12:27

回答

8

我刚刚经历了“Objective-C 2.0编程”本身,它非常好。我会推荐它,尤其是如果你从未使用C(或者如果你忘记了它,像我一样)。

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

+0

从那里链接到Apple的“Objective-C编程语言”完全描述了Objective-C,并包含了它正在讨论的内容的例子。有点干燥,但非常丰富。 – Chuck 2009-05-02 00:39:01

+0

我已经阅读了更多关于B&N的书,我现在订购它,它看起来像一本很好解释事物的好书。我更像是一个“告诉我为什么”的人。 – 2009-05-06 01:11:16

1

此外,为您解答:

的Objective-C是建作为C.

的顶部因此,它提供了两种基本类型(如int和double)扩展的面向对象的语言,对象。

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

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

+0

谢谢!我正在研究一个简单的基础工具来计算平均绝对偏差。我不知道有一个NSInteger,我认为我的文档下载被打断了,所以我可能只有一半。谢谢! – 2009-05-02 00:54:11

7

我能工作的例子,但究竟他为什么使用这样一个类(NSNumber的,而不是int或double为例),他不解释...

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

NSNumber是一个有用得多比类型等原始类型intdouble,因为它是在与你会碰到,你在可可编程其他对象一起经常使用。

例如,在为了包装一个号码作为值转换成可调整大小的阵列(像一个NSMutableArray)或一个关联数组(的NSDictionary一个实例),则需要将原始数(intdouble等)变成serializable或可归档对象 - NSNumber

基元不能被序列化,不像NSNumber,因为原语是不是在基本设置“核心基金”类型(NSNumberNSArrayNSString等),苹果已经向你努力使可用。

此外,通过使用NSNumber您还可以免费获得许多额外的便利方法:您可以快速将数字转换为字符串,例如,只需输入[myNumber stringValue]即可。或者,如果您将您的NSNumber视为某件商品的价格(“$ 1.23”),则可以应用NSNumberFormatter以确保对该数字的操作提供的结果具有您期望的格式(例如,如果您添加两个价格值,您会期望获得货币价值作为回报)。

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

0

我在一个类似的船(PHP移动到Objective-C),我发现最好的过程是跳进一个项目。我也阅读了Hillegass的书,这是一个好的开始,但要了解一门语言的唯一方法就是以一个明确的目标来进行混淆。

这是痛苦的,但它的作品。咖啡,API和面巾纸。

编辑:我刚才读您的文章的最后一部分,看到你14.也许切换与可口可乐咖啡:)

5

根据我的经验,我发现在互联网文档要学习足够有用Obj-C和CocoaTouch。我的进程是这样​​的:

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

2)阅读Getting Started,iPhone Application Programming Guide

3)阅读OOP In Obj-C

4)了解更多:Cocoa FundamentalsObjective-C PrimerCocoa Practices

5)做一些简单的教程。

IMO:您需要的所有信息都在Apple Dev:iPhone站点上。节省你的钱,不要买书。如果您不明白“为什么”在其中一个指南或教程中完成了某项操作,请立即将其与Google的其他来源进行交叉引用。

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

PHP与Objective-C非常不同。此外,在Internet上下文中解决编程问题的方式与在Obj-C中解决编程问题的方式非常不同,在iPhone上下文中。正因为如此,你需要从新的角度来看待iPhone,并作为学生/学习者。花点时间专注于面向对象编程和最佳实践。这会在未来几年祝福你。

-Buffalo

0

我最喜欢的Objective-C教程,如果你是来自任何地方的话,那就是来自斯坦福大学iOS编程的iTunesU课程。这位教授确实从其他书籍和在线教程的角度来看待事物。