(1)1958年5月,蘇黎世舉行第一次設計會議,爲新語言定下目標。其先被命名爲國際代數語言(International Algebraic Language,IAL) ,轉輾後定爲ALGOL,即算法語言。是在計算機發展史上首批清晰定義的高級語言ios
ALGOL發展:ALGOL 5八、ALGOL 60、ALGOL W(1966年)、ALGOL 68git
(2)1963年英國劍橋大學推出了CPL(Combined Programming Langurage)語言github
(3)1967年英國劍橋大學的 Matin Richards對CPL作了簡化,推出了 BCPL (Base Combined Programming Langurage)語言算法
(4)1969年先後,美國貝爾實驗室的肯·湯普森(Ken Thompson)和丹尼斯·利奇(Dennis Ritchie)設計出B語言,並用B語言寫出了第一個 UNIX 操做系統編程
(5)1972年至1973年間,貝爾實驗室的 D.M.Ritchie 在 B 語言的基礎上設計出了 C 語言,C語言即保持 BCPL 語言和 B 語言的優勢(精練、接近硬件),又克服了他們的缺點(過於簡單,數據無類型等)緩存
C發展:C8九、C9九、C11(2011年)服務器
(6)在1971年到1975年之間,Kay在Xerox PARC的小組設計並實現了第一個真正的Smalltalk語言系統,Smalltalk被公認爲歷史上第二個面向對象的程序設計語言和第一個真正的集成開發環境 (IDE)網絡
(7)80年代初布萊德·考克斯(Brad Cox)在其公司Stepstone發明Objective-C,它是C與SmallTalk-80的結晶,兼兩者之長。框架
(8)1983年,貝爾實驗室的Bjarne Stroustrup在C語言基礎上推出了C++異步
(9)C#是微軟公司在2000年6月發佈的一種新的編程語言,主要由安德斯·海爾斯伯格(Anders Hejlsberg)主持開發,它是第一個面向組件的編程語言
(10)Swift是蘋果於2014年WWDC(蘋果開發者大會)發佈的新語言
(1)1985年,被趕出蘋果的喬布斯成立了NeXT公司,選擇Unix做爲其操做系統,並建立了NeXTSTEP Toolkit軟件包,此包用於開發用戶界面,功能強大,其編程語言就是Objective-C。
(2)1988年,Next公司得到了Objective-C的撫養權,並使他在NEXTSTEP的優越環境下生長,而NEXTSTEP是從BSD Unix系統演變而來。事實上,Objective-C貴不忘本,其之後的不少方法,都以NS開頭命名(OC沒有命名空間和包類,故經過前綴來區別各種、枚舉、結構體)。
注:定義枚舉、結構體變量不須要加星號。
附1.1結構體的基本操做
(1)定義結構體 struct Data{//定義一個名爲Data 的struct類型 int year; int month; int day; }data;//這個data是變量,能夠直接在後面賦值,也可以下面(2)方式賦值 (2)聲明結構體變量 struct Date data = {2016, 1, 6}; (3)調用結構體 NSLog(@"data: %d/%d/%d", data.year, data.month, data.day); 注:ARC新規定:你不能在C結構中使用OC對象,更好的方法是用OC類去管理對象。
附1.2結構體和類區別
(1)結構體只能封裝數據,而類還能夠封裝行爲 (2)結構體變量分配在棧空間(若是是是1個局部變量的狀況下),而對象分配在堆空間。 棧的特色:空間相對較小,可是存儲在棧中得數據訪問的效率稍高一些 堆的特色:空間的相對較大,可是存儲在堆中的數據,效率低一些 存儲在棧中得數據訪問效率高, 存儲在堆中得數據效率低 (3)賦值 結構體是(拷貝) 對象之間是(地址)
附2.1C風格的枚舉
//位移操做枚舉 enum { UIViewAutoresizingNone = 0, UIViewAutoresizingFlexibleLeftMargin = 1 << 0, UIViewAutoresizingFlexibleWidth = 1 << 1, UIViewAutoresizingFlexibleRightMargin = 1 << 2, UIViewAutoresizingFlexibleTopMargin = 1 << 3, UIViewAutoresizingFlexibleHeight = 1 << 4, UIViewAutoresizingFlexibleBottomMargin = 1 << 5 }; typedef NSUInteger UIViewAutoresizing; //使用NSUInteger的地方可使用UIViewAutoresizing, //UIViewAutoresizing至關於NSUInteger的一個別名使用。 //所以一個UIViewAutoresizing的變量能夠直接賦值給NSUInteger
附2.2Objective-C風格的兩種枚舉
typedef NS_ENUM(NSInteger, UIViewAnimationTransition) { UIViewAnimationTransitionNone, UIViewAnimationTransitionFlipFromLeft, UIViewAnimationTransitionFlipFromRight, UIViewAnimationTransitionCurlUp, UIViewAnimationTransitionCurlDown, }; typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) { UIViewAutoresizingNone = 0, UIViewAutoresizingFlexibleLeftMargin = 1 << 0, UIViewAutoresizingFlexibleWidth = 1 << 1, UIViewAutoresizingFlexibleRightMargin = 1 << 2, UIViewAutoresizingFlexibleTopMargin = 1 << 3, UIViewAutoresizingFlexibleHeight = 1 << 4, UIViewAutoresizingFlexibleBottomMargin = 1 << 5 }; 注:NS_ENUM這種聲明出來的東西大部分是單選. NS_OPTIONS聲明出來的大部分是多選.
附2.3帶名稱的枚舉標準定義
typedef enum { //如下是枚舉成員 TestA = 0, TestB, TestC, }Test;//枚舉名稱 亦能夠以下定義(推薦:結構比較清晰): typedef NS_ENUM(NSInteger, Test1) { //如下是枚舉成員 Test1A = 0, Test1B = 1, Test1C = 2, };
(4)成長起來的Objective-C出類拔萃,甚至在1992年,GNU開發環境都對Objective-C敞開懷抱。
(5)1994年,NeXT和Sun公司聯合發佈了OPENSTEP,對NEXTSTEP進行了改進,其中兩重要部分是Foundation和Application Kit,並於此時開始使用NS前綴。
(6)1995年,NeXT從Stepstone處獲得了Objective-C的全部權。
(7)1996年,蘋果公司收購NeXT,故OPENSTEP/NEXTSETP環境成了蘋果操做系統下一個主要發行版本OS X的基礎。這個開發環境的版本被蘋果公司成爲Cocoa。Cocoa內置了對Objective-C的支持,並結合了Project Builder(或他的後繼版本Xcode)和Interface Builder等開發工具。
(8)2007年,Objective-C成長到2.0版本。
(1)框架、框架集:框架是一種把頭文件、庫、圖片、聲音等內容彙集在一個獨立單元中的集合體。一個框架集包含多個框架。
(2)框架集:Cocoa、Carbon、QuickTime、OpenGL、Cocoa Touch等。
(3)頭文件:框架包含不少頭文件,其中有個主頭文件,在主頭文件中,導入(#import)了該框架的全部其餘頭文件,故在程序中導入(#import)主頭文件,就可訪問該框架全部內容。
Foundation框架的主頭文件爲「Foundation.h」,其導入時體現爲:#import<Foundation/Foundation.h>
(4)改善速度:也許你擔憂頭文件太大時導入文件過多而影響編譯速度,不過Xcode會使用預編譯頭文件來大大改善此種狀況。
(5)Cocoa與Cocoa Touch區別之分
Cocoa包含Foundation、Core Data和AppKit框架,可用於開發Mac OS X系統的應用程序。
Cocoa Touch包含Foundation、Core Data和UIKit框架,可用於開發iPhone OS系統的應用程序。
Cocoa是 Mac OS X 的開發環境,Cocoa Touch是 iPhone OS的開發環境。
(6)經常使用工具包
1)「Foundation工具包」:或簡稱爲「Foundation」,首先出如今OpenStep中。在Mac OS X中,它是基於Core Foundation的。做爲通用的面向對象的函數庫,Foundation提供了字符串,數值的管理,容器及其枚舉,分佈式計算,事件循環,以及一些其它的與圖形用戶界面沒有直接關係的功能。
2)「應用程序工具包」:或稱AppKit(Application Kit)是直接衍生自NeXTSTEP的AppKit的。它包含了程序與圖形用戶界面交互所需的代碼。它是基於Foundation創建的,也使用「NS」前綴。它只能在Mac OS X中使用。
3)用戶界面工具包」:或稱UIKit(User Interface Kit),是用於iOS的圖形用戶界面工具包。它使用「UI」的前綴。
(7)其餘工具包
除 UIKit 以外,Cocoa Touch 包含建立世界一流 iOS 應用程序所需的全部框架,從 3D 圖形、專業音頻到網絡,甚至提供特殊設備訪問 API 以控制攝像機或從 GPS 硬件獲取位置。
Core Animation(支持型框架):經過 Core Animation,您就能夠經過基於組合獨立圖層的簡單編程模型來建立豐富的用戶體驗。
Core Audio(支持型框架):Core Audio 是播放、處理和錄製音頻的專業級技術,可以輕鬆爲您的應用程序添增強大的音頻功能。
Core Data(支持型框架):Core Data 提供面向對象的數據管理解決方案,該方案易於使用和理解,甚至可處理任何應用或大或小的數據模型。
(8)用過系統的哪些框架
UIKit:UI控件
Foundation:基礎框架 NSObject、NSString、NSArray等
音視頻:Core Audio、OpenAL、Media Library、AV Foundation
數據管理:Core Data、SQLite
圖形和動畫:Core Animation、OpenGL ES、Quartz 2D、Core Graphics
用戶應用:AddressBook、CoreLocation、 MapKit、Store Kit
其餘:MobileCoreService、SystemConfiguration、libz.dylib、libxml2
(9)用過哪些第三方框架
Reachability 檢測網絡鏈接 ASIHTTPRequest 網絡請求 AFNetworking 網絡請求 MBProgressHUD 提示效果 SVProgressHUD 提示效果 ZAActivityBar 提示效果 SDWebImage 圖片異步加載及緩存 UIActivityIndicator-for-SDWebImage 爲SDWebImage顯示加載效果 UIImage+Resize 調整圖片大小 ImageCacheResize 異步加載圖片、緩存及調整大小 EGOTableViewPullRefresh 下拉刷新 PullToRefresh 下拉刷新 STableViewController 下拉刷新、上拉加載更多 SVPullToRefresh 下拉刷新、上拉加載更多 CMPopTipView 提示信息 PTShowcaseViewController媒體庫效果 ios-image-filters.圖片濾鏡效果 PDF Reader Core for iOS PDF閱讀器核心 Three20 iPhone UI類集,以及HTTP磁盤緩存等通用工具 Nimbus 比起Three20更全面、豐富 facebook-ios-sdk 讓開發者將Facebook相關功能集成到本身App中 RestKit 網絡通訊 GPUImage 基於GPU圖像和視頻處理的開源iOS框架 MonoGame Microsoft XNA 4.x Framework的開源跨平臺實現 cheddar-ios 簡單即時的任務管理器 ViewDeck 相似於Path 2.0 的視圖左右滑動的效果 GMGridView 開源的iOS(iPhone/iPad)表格視圖 QuickDialog 能夠幫助開發者快速建立複雜的表單 Appirater 用於提醒用戶在打開App時,對應用進行評論或打分 Reader 讓iOS開發者垂手可得地在iOS設備屏幕上顯示PDF文件 CocoaAsyncSocket 提供了Mac OS X及iOS異步套接庫 SSToolkit 用於解決iOS開發者在開發過程當中常碰到的一些問題 XMPPFramework 提供一個RFC-3920核心實現,經過工具讀寫XML MGSplitViewController 用於iPad左右分欄界面顯示 CocoaLumberjack 日誌框架 PSTCollectionView UICollectionView的開源API兼容替代品 CocoaHTTPServer 應用的輕量級、可嵌入的HTTP服務器框架 PushSharp 推送消息通知的開源C#服務器端庫 HockeyKit 用於iOS和Android下App更新的開發包 JTRevealSidebarDemo Facebook客戶端和Path應用的視圖切換 PKRevealController 相似於Facebook客戶端的視圖橫向切換效果 QuincyKit 提供的程序崩潰報告管理解決方案 PSStackedView 可以將你的UIViewControllers堆疊起來 Chameleon 可直接替代UIKit在Mac OS X上運行的框架 DCIntrospect 很小的iOS工具集,幫助開發者對UIKit用戶界面調試 PSCollectionView 實現Pinterest風格瀑布流效果的iOS滾動組件 SDURLCache 處理緩存 FastPdfKit 能讓你在應用中顯示PDF文檔的開發類庫 KKGridView 一個高性能的iOS表格組件 MGBox2 可以實現很是酷的列表交互效果 MKNetWorkKit 一個徹底基於 ARC 的網絡工具包
(1)與C差別
導入區別——#include與#import。後者保證頭文件只被包含一次,不管此命令在該文件中出現多少次,C中要實現這功能,一般使用基於#ifdef的方案。 輸出區別——printf("");與NSLog(@""); 。後者附加了時間日期戳、進程線程號和自動換行符等。 NSString區別——""與@"" 後者是Cocoa中NSString類型的字符串。 布爾區別——bool(true與false)與BOOL(YES與NO)。兩者可在同一程序中共存,但BOOL比bool早誕生十多年,且編寫Cocoa代碼時,只能用BOOL。 註釋區別——有文檔註釋,第三方完成文檔註釋的方法爲用github的onevcat/vvDocumenter。下載下來,運行一次,而後全退,從新進入,版本匹配便可使用【Xcode8彷佛不可用】。 函數/方法調用方式不一樣 注意1:若將C風格的字符串傳入NSLog,會引起警告。 注意2:import」」和import<>區別是文件搜索順序,前者爲從當前文件夾下------編譯器文件夾下-------系統文件夾下------查找失敗;後者是從編譯器文件夾下-------系統文件夾下------查找失敗。
(2)比C新增
新增關鍵字:@interface、@implementation、@end 、@public、@protected、@private、@selector 、@try、@catch、@throw、@finally 、@protocol、@optional、@required、@class、@property、@synthesize、@dynamic、BOOL Class SEL YES NO id self super nil atomic nonatomic retain assign copy block … 新增數據類型:BOOL(字面常量值是YES或則NO)、NSObject * (OC中的對象類型)、id/in(動態對象類型,萬能指針)、SEL(選擇器數據類型)、block(代碼塊數據類型) 新增流程控制:for in循環
(3)與Java比:異常處理幾乎用不到
(4)與C++比:
OC不支持多繼承、但有類別 C++ 跟從面向對象編程裏的Simula 67(一種早期OO語言)學派,而Objecive-C屬於Smalltalk學派 Objective-C是動態定型(dynamicaly typed),它的類庫比C++容易操做
(1).h、.m和.mm文件
(2)->和打點的區別:Zhangsan->_name至關於(*zhangsan)._name
(3)預編譯指令#pragma mark指令
#pragma mark 描述:加入描述 #pragma mark -:加入橫線
(4)前綴的由來和設置的注意事項
(5)Xcode中如何設置一切警告爲錯誤
(6)如何開啓殭屍調試