標籤:
理論是枯燥的,所以有點長。哈哈哈~
要學習一門語言,我們首先得瞭解它,那麼
【什麼是OC】
objectiv-c 簡稱 OC,是一門基於C語言為基礎編寫而成的物件導向的語言。完全相容C語言;可以在OC代碼中混入C語言代碼,甚至是C++代碼;
可以使用OC開發Mac OS X平台和iOS平台的應用程式。
(一)首先,先瞭解一下面向過程和物件導向:
【面向過程】
1、面向過程的語言所有語句都是祈使句
2、面向過程的語言是數學邏輯的映射
3、面向過程語言的程式 = 資料 + 演算法
C語言就是一門面向過程的語言,解決問題關注的是過程。
【物件導向】
1、對象作為接受訊息的單位,不同的對象負責接收和處理資料的某個方面,不同對象協同完成功能
2、是生活邏輯的映射
3、程式 = 對象 + 訊息
而oc就是物件導向的語言,解決問題關注的是對象。
至於【哪種方法更好】---具體情況具體分析
提示:
>物件導向語言開發的步驟
1.根據需求設計類
2.利用類建立需要的對象
一個OC程式編寫-->運行
>
/*方法一:
1.編寫OC程式:.m源檔案(在終端touch xxx.m 建立OC程式)
2.編譯.m檔案為.o目標檔案:cc -c xxxx.m
3.連結.o檔案為a.out可執行檔:cc xxxx.o -framework Foundation
4.執行a.out檔案:./a.out
一步到位:
cc xxxx.m -framework Foundation
方法二:當然你也可以用Xcode(嘿嘿,就不那麼苦逼了)
*/
(二)類與對象的初識
1.認識
類:具有對象的屬性,是對對象的描述。
對象:類的執行個體化,看得見摸得著
武功的最高境界叫做“萬物皆對象”。
2.
【從封裝的角度】
【結構體】是對資料結構的封裝
【函數】對處理資料的演算法的封裝
【類】 是對要處理的資料結構進行封裝 同時對處理資料的演算法做了封裝
類 = 結構體 + 函數
【從程式設計語言的角度分析】
【類】它是一個自訂的類型 沒有占用記憶體
【對象】某個類建立出來的變數 用類型定義的變數會佔用記憶體
3.解決OC問題的步驟(核心思想)
第一:找到題目中所需要的對象
第二:列出對象的成員變數和成員方法
第三:根據找到的對象,建立相應的類
第四:用類建立出來對象
第五:給對象發訊息,讓對象完成相應的功能
4.設計一個類的3個步驟:
1).類名
2).屬性
3).行為(動作\功能)
(三)類和對象---實戰
類 = 屬性資料封裝(成員變數) + 方法(函數)封裝
1、【標頭檔的引用】
#import <Foundation/Foundation.h>
#import "Cube.h"
<>表示匯入系統的標頭檔
“”表示匯入自訂的標頭檔
提示:#import作用跟#include一致,而且可以防止標頭檔的內容被包含多次
// 包含Foundation架構裡面的NSObjCRuntime.h
// 應該包含Foundation架構的主標頭檔Foundation.h
2、類聲明和實現
2.1、【類的聲明】
程式碼範例
@interface Dog : NSObject{//屬性資料封裝在{ }以內 // 成員變數類型 成員變數名稱; int _age; //屬性成員名加_(成員變數) float _weight;}//封裝方法//最常用的方法 setter(設定)/getter(擷取)//c函數文法:傳回值類型 函數名(參數列表)//OC方法文法:// 方法類型//- 對象的方法//+ 類的方法//方法類型 (傳回值類型)部分方法名:(參數類型)參數名稱1 部分變數名:(參數類型)參數名稱2; // 多個參數//setter / getter 方法主要是為了保護對象的資料安全//成員變數的setter方法-(void)setAge:(int)newage; //void setAge(int age)-(void)setWeight:(float)w;//成員變數的getter方法-(int)age; // 對 -(int)getAge進行了最佳化,方法名與成員變數相對應-(float)weight;//功能方法-(void)run;-(void)bark;@end
代碼說明
a.
【首行代碼】
@interface 類名 : 父類名
1)用關鍵字@interface 聲明一個類
2)interface 後面跟的是類名
3)冒號表示繼承關係,後面跟的是父類
比如說你建立可Dog類
(: NSObject --讓Dog這個類具備建立對象的能力)
b.
【成員變數】
成員變數(執行個體變數)聲明在大括弧之間,成員變數是在描述對象有什麼.
c.
【成員方法】
1)無參 ,無傳回值的成員方法
-(void)方法名;
2)帶參數
-(void)方法名:(參數類型)形參;
3)帶多個參數的方法
-(void)標籤1:(參數1的類型)形參 and標籤2:(參數2的類型)形參;
4)帶傳回值得方法
-(傳回值類型)方法名;
【成員函數是描述對象可以做什麼】
3、【類的實現】---也可以說是方法的實現
@implementation Dog//實作類別方法關鍵字 類名// 在這裡進行方法的實現 (也就是寫具體代碼)// set方法的實現 -(void)setAge:(int)newage{ _age = newage; } // get方法的實現 -(int)age{ return _age; } //功能方法 -(void)run { NSLog(@"run....."); } @end
4、【對象的建立和使用】
1)建立對象
類名 *指標變數名 =[類名 alloc/new];
利用類的alloc/new方法建立一個新的對象(會在堆空間聲明一塊空間),並且把對象的地址返回左邊的指標變數
(所以需要用該類類型的指標變數去接收)。
Dog * dog = [Dog alloc];
2)使用對象
1> 訪問成員變數
指標變數名->成員變數名 = 具體數值;
c->speed = 100;(前提是在成員變數前寫@public)
2> 讓對象執行方法
[指標變數名 方法名];
[c run];
[指標變數名 部分方法名:實參1 部分方法名:實參2];
[c sumOfNum1:100 andNum2:200];
// 訊息機制:給指標變數所指向的對象發送一條訊息(訊息名稱就是方法名),讓那個對象執行相應的方法(動態)
int main(){ // 通過定義類指標變數引用實際對象 // 類執行個體化對象 alloc,在堆上申請空間 Dog * wangcai = [Dog alloc]; [wangcai setAge:5]; // 調用set方法設定屬性 [wangcai setWeight:50]; int a = [wangcai age]; // 調用get方法取得值 float w = [wangcai weight]; // 給對象發訊息[對象 方法]、或【對象 訊息】 // 給指標變數wangcai指向的對象發送一條run訊息 // 接收訊息的那個對象,稱為“訊息接收者” [wangcai run]; [wangcai bark]; NSLog(@"a = %d w = %f",a,w); return 0;}
5、【方法的調用】
無參無傳回值格式: [對象/類名 訊息/方法/函數名]
無傳回值 有參數: [對象/類名 訊息/方法/函數名:參數]
有傳回值的方法調用 傳回值類型的變數 = [對象/類名 訊息/方法/函數名]
/*
OC對象方法和函數的區別
1.函數屬於整個檔案,在檔案的任意地方都能調用;對象方法只屬於對象,只有對象才能調用對象方法
2.對象方法只能聲明在@interface和@end之間,對象方法只能實現在@implementation和@end之間.
函數的聲明和定義可以寫在任意地方,函數不能歸某個類所有,只屬於某個檔案
*/
補充:
對象在記憶體中的儲存情況
1.每一個對象都有自己的成員變數,每個對象的成員變數之間是獨立,互不影響
2.每一個對象內部都有方法列表,方法的代碼都的一樣的
iOS開發之oc(回顧筆記)--類與對象(1)