Objective-C編程之道:IOS設計模式解析
Obj-C高級編程
[Objective-C 程序設計(第4版)].(斯蒂芬).林冀等.掃描版
我只有這些
要的話留郵箱
⑵ ios應用開發Objective-C語言簡介
Objective-C,通常寫作ObjC和較少用的Objective C或Obj-C,是擴充C的面向對象編程語言。它主要使用於Mac OS X和GNUstep這兩個使用OpenStep標準的猜頃卜系統,而在NeXTSTEP和OpenStep中它更是基本語言。Objective-C可以在gcc運作的系統寫和編譯,因為gcc含Objective-C的編譯器。1980年代初布萊德·確斯(Brad Cox)在其公司Stepstone發明Objective-C。他對軟體設計和編程里的真實可用度問題十分關心。Objective-C最主要的描述是他1986年出版的Object Oriented Programming: An Evolutionary Approach. Addison Wesley. ISBN 0-201-54834-8.
優點及缺點
Objective-C是非常「實際」的語言。它使用一個用C寫成、很小乎擾的運行庫,只會令應用程序的大小增加很小,和大部分OO系統使用極大的VM執行時間會取代了整個系統的運作相反。ObjC寫成的程序通常不會比其原始碼大很多。而其函式庫(通常沒附在軟體發行本)亦和Smalltalk系統要使用極大的內存來開啟一個窗口的情況相反。 Objective-C的最初版本並不支持垃圾回收。在當時這是爭論的焦點之一,很多人考慮到Smalltalk回收時有漫長的「死亡時間」,令整個系統失去功用。Objective-C為避免此問題才不擁有這個功能。雖然某些第三方版本已加入這個功能(尤是GNUstep), Apple在其Mac OS X 10.3中仍未引入這個功能。 另一個問題是ObjC不包括命名空間機制(namespace mechanism)。取而代之的是程序設計師必須在其類別名稱加上前綴,時常引致沖突。在2004年,在Cocoa編程環境中,所有Mac OS X類別和函式均有「NS」作為前綴,例如NSObject或NSButton來清楚分別它們屬於Mac OS X核心;使用「NS」是由穗穗於這些類別的名稱在NeXTSTEP開發時定下。 雖然Objective-C是C的母集,但它也不視C的基本型別為第一級的對象。 和C++不同,Objective-C不支援運運算元多載(它不支持ad-hoc多型)。亦與C++不同,但和Java相同,Objective-C只容許對象繼承一個類別(不設多重繼承)。Categories和protocols不但可以提供很多多重繼承的好處,而且沒有很多缺點,例如額外執行時間過重和二進制不兼容。
Objective-C 排行榜
TIOBE 2010 5月編程語言榜已於近日發布,本期主要變化是Objective-C排名進入前十。盡管Objective-C的份額在上個月只達到0.08%,但卻在排名上邁出了重要一步——首次進入前十名。這一步的意義重大,要知道,2001年6月TIOBE編程榜發布以來,總體只有13個編程語言曾經進入前十名。 Objective-C流行的主要原因可能是它是唯一一種可以為iphone和ipad編程的語言。但單從編程語言的角度來看,誕生於1986年的Object-c並沒有表現出多少新意。
TIOBE 2010年6月份編程語言榜已於近日發布,Objective-C排名繼續爬升,從第10名上升到第9名。由此可見,Objective-C具有很大的發展空間。
Objective-C和C++的比較
單一繼承:
Objective-C不支持多重繼承,(同Java和Smalltalk),而C++語言支持多重繼承。
動態:
Objective-C是動態定型(dynamicaly typed)所以它的類庫比C++要容易操作。Objective-C 在運行時可以允許根據字元串名字來訪問方法和類,還可以動態連接和添加類。
C++ 跟從面向對象編程里的Simula 67(一種早期OO語言)學派,而Objecive-C屬於Smalltalk學派。
在C++里,對象的靜態類型決定你是否可以發送消息給它,而對Objective-C來說,由動態類型來決定。Simula 67學派更安全,因為大部分錯誤可以在編譯時查出。 而Smalltalk學派更靈活,比如一些Smalltalk 看來無誤的程序拿到Simualr 67那裡就無法通過。
從很多方面來看,C++和Objective-C的差別,與其說時技術上的, 不如說是思維方式上的。你是否想更安全而舍棄靈活性?Simular67學派的支持者聲稱既然程序設計出色何必再要靈活性,而 Smalltalk學派則辯稱為了靈活可以容忍運行時多出錯。
Objective-C簡明教程
前言
◆開始學習前,假設你已經具備了一些C語言的基礎知識,包括變數類型、函數、返回值、以及指針的相關概念。如果對這些還不了解,建議首先學習譚浩強的《C程序設計》。
◆Objective-C,是 C 的衍生體,繼承了所有 C 語言的特性。是有一些例外,但是它們不是繼承於 C 的語言特性本身。
◆nil:在 C/C++ 你或許曾使用過 NULL,而在 Objective-C 中則是 nil。不同之處是你可以傳遞訊息給 nil(例如 [nil message];),這是完全合法的,然而你卻不能對 NULL 如法炮製。
◆BOOL:C 沒有正式的布爾類型,而在 Objective-C 中也不是「真的」有。它是包含在 Foundation classes(基本類別庫)中(即 import NSObject.h;nil 也是包括在這個標頭檔內)。BOOL 在 Objective-C 中有兩種型態:YES 或 NO,而不是 TRUE 或 FALSE。
◆#import vs #include:就如同你在 hello world 範例中看到的,我們使用了 #import。#import 由 gcc 編譯器支援。我並不建議使用 #include,#import 基本上跟 .h 檔頭尾的 #ifndef #define #endif 相同。許多程式員們都同意,使用這些東西這是十分愚蠢的。無論如何,使用 #import 就對了。這樣不但可以避免麻煩,而且萬一有一天 gcc 把它拿掉了,將會有足夠的 Objective-C 程式員可以堅持保留它或是將它放回來。偷偷告訴你,Apple 在它們官方的程式碼中也使用了 #import。所以萬一有一天這種事真的發生,不難預料 Apple 將會提供一個支援 #import 的 gcc 分支版本。
◆ Objective-C 中, method 及 message 這兩個字是可以互換的。不過 messages 擁有特別的特性,具體區別在後面介紹。
編譯 hello world
hello.m#importintmain(intargc,constchar*argv[]){printf("helloworld");return0;}
◆輸出
hello world
◆ 在 Objective-C 中使用 #import 代替 #include
◆ Objective-C 的預設副檔名是 .m
創建 classe
@interface
◆基於 "Programming in Objective-C," Copyright (C) 2004 by Sams Publishing 一書中的範例,並經過允許而刊載。
Fraction.h#import@interfaceFraction:NSObject{intnumerator;intdenominator;}-(void)print;-(void)setNumerator:(int)n;-(void)setDenominator:(int)d;-(int)numerator;-(int)denominator;@end
◆NSObject:NeXTStep Object 的縮寫。因為它已經改名為 OpenStep,所以這在今天已經不是那_有意義了。
◆繼承(inheritance)以 Class: Parent 表示,就像上面的 Fraction: NSObject。
◆夾在 @interface Class: Parent { .... } 中的稱為 instance variables。
◆沒有設定存取許可權(protected, public, private)時,預設的存取許可權為 protected。設定許可權的方式將在稍後說明。
◆Instance methods 跟在成員變數(即 instance variables)後。格式為:scope (returnType) methodName: (parameter1Type) parameter1Name;scope 有class 或 instance 兩種。
◆instance methods 以 - 開頭,class level methods 以 + 開頭。
◆Interface 以一個 @end 作為結束。
原生的Hello World代碼
#importintmain(intargc,constchar*argv[]){NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init];//insertcodehere...NSLog(@"Hello,World!");[pooldrain];return0;}
關於hello world的更多擴展內容
在 Objective-C 中 #import 和 #include 的區別
在 Objective-C 中,#import 被當成 #include 指令的改良版本來使用。除此之外,#import 確定一個文 件只能被導入一次,這使你在遞歸包含中不會出現問題。使用哪一個還是由你來決定。一般來說,在導入 Objective-C 頭文件的時候使用 #import,包含 C 頭文件時使用 #include。
⑶ c語言可以開發iOS軟體嗎(ios手機編寫c語言的軟體)
准確的說,是使用objective-c語言開發iOS應用
第一階段:網站中的TheiOSApprentice教程(難度指數:※)
以上有幾個答案提到了這個網站,但看什麼教程沒有細說,我在這里簡單說說。TheiOSApprentice的教程針對完全沒有編程經驗的人設計。這個教程是外國人寫的並且有免費試讀版,感興趣的人要看看。裡面說的東西都非常非常基本,裡面一個共講解了4個不同類型app,強烈建議一步一步按照上面所寫的步驟敲一遍代碼。其中你會遇到很多復雜的語句和長的可怕的函數,你不用感到恐慌,照著敲,知道它幹嘛用完全OK了,隨著你編程時間以及經驗的增加,你都會懂得。
第二階段:培訓班的網路課程及入門書籍
經過第一個階段你應該已經大致掌握IOS開發流程,能編寫一個非常簡單的應用了。這時候相信你的熱情應該會很高漲,但接下來的學習可能會很枯燥,做好准備。網路課程的話推薦李明傑的課程,不推薦其他的。(他目前在廣州創業建立自己的培訓品牌,沒有自製力看網路課程的請去找他。傑哥開源了一些非常優秀的框架如:MJExtension)
建議首先要惡補基礎知識。經過第一個階段你可能覺得你懂不少了,但是只是表面,尤其是沒學過編程的應該好好學習一下視頻前面的課程,主要看看語法。等你看惡心了看煩了就去看氏閉視頻里UI部分,這里相對於來說比較輕松,一定要把視頻里寫的語句打一遍,相信這樣你理解會更深刻。裡面說的不清楚的地方上網可以網路,可以查書(如果你有書的話)。
Q:視頻教程是用來做什麼的?
A:光有實踐沒有知識是寫不好程序的,第一階段基本都是實踐,第二部分則是用來查缺補漏。之所以推薦網路課程是因為講解的比較系統,各種入門知識都會涉及。因為iOS所涉及內容龐大單看幾本書還是涉及不全的。
Q:上不上培訓班?
A:個人意見是不推薦去,自學足夠了。現在學習iOS的環境比前幾年好太多了,光憑借網上的資料是完全可以的殲喊裂學得很好的,如果你連這點學習能力還沒有我也不相信你將來能成為一個很優秀的工程師。而且你會發現在社會上一些互聯網公司是拒絕接收培訓班出來的人。
推薦入門書籍:
tips:以下所有書籍有英文版看英文版,有最新版看最新版
1、《Objective-C程序設計》(難度指數:※※)
2、《iOS7應用開發入門經典》(難度指滲耐數:※※)
3、《iOS開發指南-0基礎到AppStore上架》(難度指數:※※※)
4、《iOS編程實戰》(難度指數:※※※※)
這裡面講解的很清楚,後面甚至有簡單的項目可以練手,這對於看視頻教程看惡心的同學是個福音~你可以先做項目遇到不懂的再看視頻。
這里我想多說一句,買iOS開發的輔導書千萬別買過時太久的,我看以上有答案還推薦iOS4系列叢書呢...拜託現在都什麼年代了,現在iOS8教程都要出來了,你iOS6的教程都過時好久了更別提iOS4了...對於新出的swift語言好多人難以選擇不知道該學OC好還是Swift好。我個人建議現在學OC,一門新語言的誕生需要經過時間的考驗與洗禮。等你學好了OC以後再看也不遲。
第三階段及以後
到這個階段你應該擁有了充分的自學能力,已經達到了入門水平。
這時候以下網址將成為你的家常便飯:
Github,如果你編程遇到困難,在上面應該都能找到合適的解答。(前提是你英文不要太差)。Github上好多開源代碼足夠豐富你的眼界。如果你想成為一個iOS開發者的話這上面兩個網站是你經常以及必須會用到的。