iOS概念入門學習-OC-類和對象

概要:本文介紹了類和對象的基礎知識和其簡單地應用。

一、OC和C的差異

盼望着,盼望着,面向對象來了,iOS的腳步近了。
那麼OC和C到底有什麼差別呢?
首先要明確地是,OC是C的擴展,OC支持C的語法,具體差別在哪,下面將一一列出

1.源文件對比

C中常見的源文件有.c 和 .h ;
OC中常見的源文件有.h 和 .m ;

2.基本語法對比

1)數據類型對比

首先OC兼容C中的所有數據類型;
OC新增了boolean類型、block類型、對象類型、特殊類型SEL和nil 等;
另外,C中不兼容OC中新增的類型;

2)流程控制語句對比;

首先OC兼容了C中所有的流程控制語句;
OC又新增了自己的for in 增強型的循環語句;
//OC中的增強型for循環
for(NSString *str in arr){
NSLog(@"%@",str);
}

另外,C中不兼容OC中新增的增強循環語句;

3)函數和方法定義聲明的對比;

C語言中函數的聲明和實現

i.函數聲明:
int sum(int a,int b); 
ii.函數定義
int sum(int a,int b){ 
    return a+b; 
} 

OC語言中函數習慣稱之爲“方法”

i.方法聲明:
-(int)sum:(int) a and:(int) b; 
ii.方法定義
-(int)sum:(int) a and:(int )b{ 
    return a+b;
} 

3.import和include的區別

(1)include 和 import 都是引入頭文件
(2)import引入的頭文件,可以防止重複包含
(3)include它是使用預處理指令防止重複包含,如果沒有寫預處理指令,則無法防止重複包含問題

4.NSLog和printf使用的差異

(1)NSLog 會自動換行 而printf不會自動換行
(2)NSLog 會自動輸出時間等項目信息,printf不會輸出調試信息
(3)NSLog 函數的參數是一個NSString 對象,printf是一個字符串常量指針

二、面向對象

1.面向對象的概念

(1)概念

面向對象(object-oriented ;簡稱: OO) 至今還沒有統一的概念,我這裏把它定義爲: 按人們認識客觀世界的系統思維方式,採用基於對象(實體)的概念建立模型,模擬客觀世 界分析、設計、實現軟件的辦法。通過面向對象的理念使計算機軟件系統能與現實世界中的 系統一一對應。

面向對象編程(Object Oriented Programming-OOP) 是一種解決軟件複用的設計和編程方法。這種方法把軟件系統中相近相似的操作邏輯和操作應用數據、狀態,以類的型式描述出來,以對象實例的形式在軟件系統中複用,以達到提高軟件開發效率的作用。 

(2)面向對象編程的優點

1)大幅度提高軟件項目的成功率
2)減少維護費
3)高可移植性和可靠性

(3)面向對象設計三個主要特徵

1)封裝性
2)多態性
3)繼承性

(4)面向對象和麪向過程的區別:

面向過程
1)強調的是功能行爲
2)關注的是解決問題需要哪些步驟

面向對象
1)將功能封裝進對象,強調具備了功能的對象
2)關注的是解決問題需要哪些對象
3)面向對象是基於面向過程的。

三、類和對象

1.概念

類:類是具有相似內部狀態和運動規律的實體的集合(或統稱、抽象)。
對象: 即指現實世界中各種各樣的實體。它可以指具體的事物也可以指抽象的事物。
屬性和事件:在面向對象概念中我們把對象的內部狀態稱爲屬性、運動規律成爲方法或事件。

2.類和對象之間的關係

類(Class)
一個類由3個部分構成
(1)類的名稱:類名
(2)類的屬性:一組包含數據的屬性
(3)類的方法:允許對屬性中包含的數據進行操作的方法

對象(Object)
(1)對象是系統中的基本運行實體
(2)對象就是類類型(class type)的變量
(3)定義了一個類,就可以創建這個類的多個對象
(4)一個類就是具有相同類型的對象的抽象

3.類的聲明和實現

(1)相關名詞介紹

  • .h文件:類的生命文件,用於聲明成員變量、方法。類的聲明使用關鍵字@interface和@end。
  • .m:類的實現文件,用於實現.h中聲明的方法。類的實現使用關鍵字@implementation和@end。
    方法:
    方法的聲明和實現,都必須以 + 或者 - 開頭
  • +表示類方法(靜態方法)
  • -表示對象方法(動態方法)
    在.h中聲明的所有方法作用域都是public類型,不能更改
  • 作用域的種類:
    成員變量的常用作用域有3種:
    @public 全局都可以訪問
    @protected 只能在類內部和子類中訪問
    @private 只能在類內部訪問

(2)聲明一個類

1)聲明類使用關鍵字 @interface
2)聲明類,我們通常放到.h的頭文件中
這裏寫圖片描述

(3)實現一個類

1)實現一個類 使用關鍵字:@implementation
2)實現一個類通常放到.m的文件中
3)實現類主要是對方法的具體實現
這裏寫圖片描述

4.對象的創建

這裏寫圖片描述

[Car new]; 在內存中幹三件事:
(1)開闢存儲空間
(2)初始化成員變量(寫在類聲明大括號中的屬性就叫成員變量,也叫實例變量)
(3)返回指針地址

理解方式一:
定義了一個Car類型的指針變量
指針變量指向新申請的內存空間

理解方式二:
用Car類實例化了一個實例對象,對象的名稱是p
Car *p = [Car new];

5.方法的聲明和調用

(1)方法的聲明

1)無參
這裏寫圖片描述

2)有參
這裏寫圖片描述

(2)方法的調用

1)無參
這裏寫圖片描述
2)有參
這裏寫圖片描述

(3)對象方法和類方法

對象方法
1)對象方法以-開頭如 -(void)xx;
2)對象方法只能由對象來調用
3)對象方法中可以訪問當前對象的成員變量
4)調用格式 [對象名 對象方法名];

類方法
1)類方法以+開頭 如+(void)put;
2)類方法只能由類來調用
3)類方法中不能訪問實例(成員)變量,因爲類方法由類來調用,並沒有創建存儲空間 來存儲類中的成員變量。
4)調用格式:[類名 類方法名];

類方法的好處和適用場合:
1)不依賴於對象,執行效率更高;
2)能用類方法解決的問題,儘量使用類方法;
3)場合:當方法內部不需要使用到成員變量時,可以改爲類方法。

總結:經歷了C語言的學習之後,終於踏入了OC的門檻,類和對象的思想、面向對象編程是思維方式的轉變,編程變得更高效、可維護性更高,OC雖然是C的擴充,但是語法方面還是有很多不同的,不過學習之後,好像一切又是那麼的“理所應當”。更深入的學習期待中…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章