1. 程式人生 > >Object-c語言特性

Object-c語言特性

一. Object-C 的前世今生

Object-C語言由 Brad J.Cox於20世紀80年代早期設計,以SmallTalk為基礎,建立在C語言之上。1988年,NeXT獲得Object-C的授權,開發出了Object-C的語言庫和一個名為NEXTSTEP的開發環境。1994年,NeXT公司與Sun 公司聯合釋出了一個針對NEXTSTEP系統的標準規範,並命名為OPENSTEP。OPENSTEP在自由軟體基金會的實現名稱為GNUStep。有Linux下的版本。1996年,蘋果公司收購了NeXT公司,並將NEXTSTEP/OPENSTEP定為蘋果作業系統下一個主要發行版本的基礎。併發布了一個相關開發環境,名為Cocoa,內建了對Obejct C的支援。2007年,蘋果公司釋出了Object-C 2.0,並在iPhone上使用Object-C進行開發。

因此,能夠編譯Object-C語言可以使用GNUStep和Apple公司提供的SDK,而如果要使用到Cocoa的話,只能在Apple公司的SDK上。

二. 資料型別和表示式

(1)繼承自C 的結據結構與表示式:

Object-C是基於C語言的,在C語言上進行擴充套件的。因此它支援C 下,所有的基本資料結構與運算子,下表總結了其支援的基本資料結構與運算子。

基本資料結構

char , short int , unsigned short int , int , unsigned int ,long int , unsigned long int , long long int , usigned long long int , float , double , long double 

運算子

+ . - , * , / , % , = , == , && , || , & , | , ^ , ~ , << , >> , <= , >= , < , > 

(2) Object-C新增的資料結構:

Object-C了一個可以儲存任何型別的資料結構 ----  id資料型別。它是一般物件型別,能夠儲存任何型別的方法。

三. 流程控制

Object-C繼承了全部C的流程控制,if-else語句, while語句,switch語句,在這裡就不細說了。

四. 類與結構

(1) 簡單的類:

在Object-C中, 一個類分為介面與實現兩個部分,分別使用@interface與@implementation來表示。

@interface用於描述類、類的資料成分以及類的方法;@implementation部分包括實現這些方法的實際程式碼。

@interface的一般格式類似於:
@interface  ClassName : ParentClassName [ < protocol , .. > ] 

{

[@protected | @private | @public | @package ]

memberDeclarations 

}

methodDeclarations ;

@end;

其中,使用-表示這是一個例項方法, 而使用+表示這是一個類方法。

預設情況下,類的成員屬性都是protected的。在類的宣告中也可以使用特定指定其屬性。

@implement的一般格式類似於:

@implement ClassName

methodDefinitions 

@end

(2) 兩個類中的特殊引用:

 在Object-C中,在類中提供了兩個特殊的引用,一個是self, 一個是super 。

 self引用 C語言中的this指標一樣,指向該類本身,而super則是指向其父類。

(3) 類繼承與擴充套件

a) 類繼承

Object-C中定義的所有類都必須繼承自同一個父類-- NSObject,也可以繼承自某個已經繼承了NSObject的類,成為其子類。關於類繼承的一些規則與C++語言類似,在這裡就不詳細描述了。

b)  類擴充套件

Object-C也提供了另外一種在原有類上進行擴充套件的機制,叫做類擴充套件。使用這種機制可以在不修改原有類程式碼的基礎上進行類的擴充套件。經過擴充套件後的類擁有新的屬性或者方法

(4) 動態特性

Object-C中一個強大的特性就是它的動態因素。每個物件都儲存著它所擁有的一些類屬性,包括屬於哪個類, 哪個父類,是否響應某個函式等等,因此 Object-C也支援一些處理動態型別的方法。

也因為Object-C 的動態特性,導致了一些常規的編譯時效能優化方法都不用能於Object-C,這也是導致了 Object-C的執行效能劣於類似的物件抽象語言(如C++) ,因此一些底層的操作應使用C++或類似的語言進行封裝,由Object-C負責高層邏輯的封裝。

     (5) 多重繼承的偏方

由於Object-C不支援多重繼承,有一些邏輯類的封裝可能無法方便地使用,因此Object-C中提供了協議的機制,一個類可以實現若干的協議,從這個角度實現了類的多重繼承。 

五. 基本的 C 語言特性

a) import 與 include
對於Objecy-C與C語言兩大陣營的一個分歧在於,Object-C更偏向於使用import並且效能比include更高。 

b) define

Object-C支援所有的預編譯操作

c) 指標

Object-C支援C中的指標操作

六.Object-C的一些原理

(1)類物件的結構

每個物件的結構中儲存著該類的所有成員屬性與一個名為isa的保護成員屬性,其記錄著該物件所屬於的類,當該物件呼叫函式的時候則通過這個isa的保護成員屬性確定其所屬的類,從而知道如何呼叫這個方法。

(2)類物件的指標屬性

在Object-C中,所有的物件變數都必須以指標的形式定義,並使用alloc函式進行記憶體分配。而在Foundation框架中,Object-C提供了自動釋放池與自動垃圾回收機制去進行記憶體管理。在Object-C 中, 類物件更像是一種引用,採用引用計數進行自動釋放是iphone sdk中一個重要的內容。

(3)函式呼叫

在Object-C中,函式呼叫都是使用一種訊息機制,向特定的類物件傳送訊息,以達到函式呼叫的目的。

【參考資料】

1.Programming in Objective-C 2.0 ( second edition ) , Stephen G. Kochen 

2.The Objective-C Programming Language , Apple Developer Connection

3.Objective-C item in WIKI


相關推薦

Object-c語言特性

一. Object-C 的前世今生 Object-C語言由 Brad J.Cox於20世紀80年代早期設計,以SmallTalk為基礎,建立在C語言之上。1988年,NeXT獲得Object-C的授權,開發出了Object-C的語言庫和一個名為NEXTSTEP的開發環境

C++語言特性

確實有一些操作或者C++的一些語言特性比其他因素更容易成為程式的瓶頸,一般公認的有如下因素。 (1)缺頁:如第四章中所述,缺頁往往意味著需要訪問外部儲存。因為外部儲存訪問相對於訪問記憶體或者程式碼執行,有數量級的差別。因此只要有可能,應該儘量想辦法減少缺頁。 (

Object-C語言Block的實現方式

開場白 Block基本概念 中間態轉換方法 Block編譯後結果分析 Block執行時狀態與編譯狀態對比   開場白   Object-C語言是對C語言的擴充套件,所以將OC原始碼進行編譯的時候,會將O

C++語言特性?虛擬函式與純虛擬函式的作用與區別?

一、C++語言的特性有哪些? 1、封裝 封裝就是將抽象得到的資料行為(或功能)相結合,形成一個有機的整體,也就是將資料與操作資料的函式程式碼進行有機地結合,形成類,其中的資料和函式都是類的組成部分,稱為類的成員。 2、繼承 繼承是從先輩處得到的屬性和行為特徵。類的繼承,是新

C++語言特性:建構函式,解構函式,虛擬函式,行內函數,靜態成員函式,過載,覆蓋,隱藏

C++中class預設屬性為private, struct預設屬性為public 建構函式:        1.初始化物件成員;        2.建立類物件;        由於虛擬函式是建立在物件的基礎上的,因此建構函式不能宣告為虛擬函式;虛擬函式是在執行的時候才識別,

靈活而奇特的C++語言特性——const(一)

       學習了博主的《漫談繼承技術》系列博文之後,相信大家都有所收穫吧!這次博主將和大家一起探討 《靈活而奇特的C++語言特性》 ,主要包括引用、常量(const)、常量表達式(constexp

C++語言特性(長期更新)

C++是一門需要不斷實踐的語言,因為他的各種特性,程式設計技巧實在太多了,多到幾乎難以完全掌握。可以說,學的越深入,用的越多,越發現自己的無知。所以,僅此記錄自己在學習C++過程中或疑惑不解,或認知出錯,或驚為天人的一些語言特性、程式設計技巧與底層內涵! 擁

精通C#--高階C#語言特性

高階C#語言特性 1.索引器 1.1.索引器方法 public class PersonCollection : IEnumerable { private ArrayList arPeople = new ArrayList(); /

黑馬程式設計師——Object-C的基礎學習——語言特性

lt;a target=_blank href="http://www.itheima.com" target="blank">Java培訓、Android培訓、iOS培訓、.Net培訓</a>、期待與您交流! ------- 初衷:       生平第一

取球問題--c語言邏輯運算的短路特性

寫法 取出 編程 main highlight out 小球 ret log 今盒裏有n個小球,A、B兩人輪流從盒中取球。每個人都可以看到另一個人取了多少個,也可以看到盒中還剩下多少個。兩人都很聰明,不會做出錯誤的判斷。 每個人從盒子中取出的球的數目必須是:1,3,7或者8

C# 語言歷史版本特性C# 1.0到C# 8.0匯總)

fun github mat 發的 初始 The locks urn 線圖 原文:C# 語言歷史版本特性(C# 1.0到C# 8.0匯總)歷史版本 C#作為微軟2000年以後.NET平臺開發的當家語言,發展至今具有17年的歷史,語言本身具有豐富的特性,微軟對其更新支持

C#語言各個版本特性(三)

int 表達式 分離 mode 編碼 pro csharp ole arraylist 三、查詢集合 1.找出List<Product>列表中符合特定條件的所有元素 C#1.1 查詢步驟:循環,if判斷,打印 product類 1 using System

C/C++語言的內在特性和應用方向

C 最令人崇拜的語言 在學習C/C++或者想要學習C/C++可以加入我們的學習交流QQ群:835257103,群內有學習資源,大家一起學習交流  它既有高階語言的特點,又具有組合語言的特點,它是結構式語言。C語言應用指標:可以直接進行靠近硬體的操作,但是C的指標操作不做保

Visual C++2010的c++語言四大新特性

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

c語言】帶你真正走進指標的世界——指標的特性

         當你看到這篇文章時,請忘掉你之前對指標的所有認知,什麼地址什麼的統統忘掉。                      

C# 語言各個版本主要特性

C# 1.0 特性----第1個版本,程式語言最基礎的特性。Classes:面向物件特性,支援類型別Structs:結構Interfaces:介面Events:事件Properties:屬性,類的成員,提供訪問欄位的靈活方法Delegates:委託,一種引用型別,表示對具有特

C# 語言歷史版本特性C# 1.0到C# 7.1彙總更新)

歷史版本 C#作為微軟2000年以後.NET平臺開發的當家語言,發展至今具有17年的歷史,語言本身具有豐富的特性,微軟對其更新支援也十分支援。微軟將C#提交給標準組織ECMA,C# 5.0目前是

C++語言的一些晦澀特性

這個列表收集了 C++ 語言的一些晦澀(Obscure)特性,是一些前輩經年累月研究這門語言的各個方面收集起來的。C++非常龐大,我總是能學到一些新知識。即使你對C++已瞭如指掌,也希望你能從列表中學到一些東西。下面列舉的特性,根據晦澀程度由淺入深進行排序。 1. 方括號的真正含義

C++你不知道的那些事兒—C++語言的15個晦澀特性

這個列表收集了 C++ 語言的一些晦澀(Obscure)特性,是我經年累月研究這門語言的各個方面收集起來的。C++非常龐大,我總是能學到一些新知識。即使你對C++已瞭如指掌,也希望你能從列表中學到一些東西。下面列舉的特性,根據晦澀程度由淺入深進行排序。 1. 方括號的真正含義 2. 最煩人的解析 3

C語言函式指標實現多型特性

1、函式指標 函式指標是指向函式的指標變數,本質上是一個指標,類似於int*,只不過它是指向一個函式的入口地址。有了指向函式的指標變數後,就可以用該指標變數呼叫函式,就如同用指標變數引用其他型別變數一樣。 指標函式一般有兩個作用:呼叫函式和做函式的引數。 2、函式指標實現多