2009-05-02 15 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課程。這位教授確實從其他書籍和在線教程的角度來看待事物。