01-基本語法、類和對象

一恬涧、基本語法
1注益、Objectiv-C簡介:

a、是C語言的基礎(chǔ)上溯捆,增加了一層最小的面向?qū)ο笳Z法丑搔;
b、完全兼容C語言提揍;
c啤月、可以在OC代碼中混入C語言代碼,甚至是C++代碼碳锈;
d顽冶、擴展名是:.m,想寫入c++代碼,擴展名改成 .mm售碳;

2强重、關(guān)鍵字:

基本上所有關(guān)鍵字都是以@開頭绞呈;例如:@interface,@implementation间景,@end佃声,@public等

3、字符串:

字符串以@開頭 如:@”hello”;而"hello"是C語言字符串倘要。

4圾亏、基本數(shù)據(jù)類型:char、int封拧、float志鹃、double、BOOL(YES/NO)泽西;

BOOL類型的本質(zhì):typedef signed char BOOL;
有兩種取值: YES/NO;
`#define YES (BOOL)1`
`#define NO (BOOL)0
BOOL的輸出:當整數(shù)來用 %d/%i;

5曹铃、nil相當于C語言中的NULL,也就是0捧杉;
6陕见、輸出語句:

NSLog(@"hello"); NSLog(@"hello,%d",15);//輸出內(nèi)容后會自動換行

NSLog的用法與printf區(qū)別:
a、NSLog是Foundation框架下的東西味抖,使用需要#import <Foundation/Foundation.h>评甜;使用printf需要 #include<stdio.h>
b、NSLog輸出時會自動換行仔涩,printf不會忍坷。
c、NSLog輸出時寫法@"xxxxx",參數(shù)需要的是NSString類型熔脂,而printf需要的是char* 類型的數(shù)據(jù)
d承匣、OC中的字符串如果想打印用NSLog的%@,printf不能使用%@進行輸出的
e锤悄、NSLog的時間初是不能去掉的

7、基本語句:

循環(huán)語句(do while嘉抒、while零聚、for)、條件語句(if些侍、if-else隶症、switch)

8、注釋:“//”和“/....../”
9岗宣、 開發(fā)過程和C語言類似:.m源文件->編譯->.o目標文件->鏈接->可執(zhí)行文件

a蚂会、加載Foundation框架的所有內(nèi)容#import <Foundation/Foundation.h>
b、#import用途:
(1)耗式、跟include一樣胁住,拷貝文件的內(nèi)容趁猴;
(2)、可以防止文件的內(nèi)容被重復(fù)拷貝彪见;
c儡司、編譯-鏈接-運行
編譯:cc –c 文件名.c;
鏈接:cc 文件名.o –framework Foundation
運行:./a.out
d余指、主頭文件:
(1)捕犬、最主要的頭文件,名字一般跟框架名稱一樣酵镜,包含了框架中的所有其他頭文件碉碉;
(2)、Foundation框架的主頭文件名稱就是Foundation.h淮韭;
(3)垢粮、只需要包含F(xiàn)oundation框架的主頭文件,就可以使用整個框架的東西缸濒;

10足丢、代碼簡單編寫:第一個OC程序

#import <Foundation/Foundation.h>
int main()
{
NSLog(@"第一個OC程序");
return 0;
}

跟C語言一樣庇配,OC程序的入口依然是main函數(shù)斩跌,只不過寫到一個.m文件中

二、類和對象
1捞慌、OC是面向?qū)ο蟮囊唬珻是面向過程的

區(qū)別分析:面向過程關(guān)注的是解決問題需要哪些步驟;面向?qū)ο箨P(guān)注的是解決問題需要哪些對象啸澡;兩種思想都能達到解決問題的目的袖订,但是解決思路不一樣;

2嗅虏、類和對象的關(guān)系:

類是對所有對象相同屬性的概括洛姑,就是對象的描述。

a皮服、面向?qū)ο箝_發(fā)步驟:首先考慮需要設(shè)計哪些類楞艾,再利用類創(chuàng)建多少個對象
(1)、設(shè)計類的步驟:類的名稱(有意義的類名)龄广,屬性硫眯,行為;
(2)择同、一般的名詞都是類两入,類名的第一個字母必須是大寫的,不能有下劃線敲才,多個英文單詞裹纳,用駝峰標識(每個英文單詞首字母大寫)择葡;
(3)、擁有相同(或類似)屬性和行為的對象都可以抽象出一個類痊夭;
(4)刁岸、哪個對象最清楚這個行為,就把這個行為寫到哪個對象中去她我;

3虹曙、創(chuàng)建一個OC類:

完整地寫一個類:類的聲明和類的實現(xiàn);(完整地寫一個函數(shù):函數(shù)的聲明和定義(實現(xiàn)))
類名:1>類名的第一個字母必須大寫番舆;2>不能有下劃線酝碳;3>多個單詞間用駝峰標識。例如JumpZoombie

a恨狈、類的聲明

@interface 類名 : NSObject// :NSObject目的是讓類具備創(chuàng)建對象的能力
{
成員變量(實例變量):數(shù)據(jù)類型 成員變量名;
}
方法聲明 - (數(shù)據(jù)類型)方法;
@end

b疏哗、類的實現(xiàn)

@implementation 類名
方法的實現(xiàn)
- (數(shù)據(jù)類型)方法
{
}
@end

c、使用注意

(1)禾怠、類的方法實現(xiàn)的時候返奉,方法內(nèi)可直接訪問成員變量
(2)、類在內(nèi)存中也占據(jù)存儲空間吗氏,從頭到尾只占據(jù)一塊存儲空間芽偏;
(3)、第一次創(chuàng)建對象的時候弦讽,首先分配內(nèi)存給類污尉,然后在分配內(nèi)存給創(chuàng)建的對象;
(4)往产、在使用類創(chuàng)建對象之前被碗,會將類加載進內(nèi)存(只有一次),類的內(nèi)存里只存放方法列表;
(5)仿村、定義的對象內(nèi)部都有一個默認的isa指針锐朴,指向?qū)ο笏鶎?yīng)的類;
(6)蔼囊、[p run]; [消息接收者 消息]:是給指針p所指向的對象發(fā)送一條run消息包颁,對象會順著isa指針找到對應(yīng)的類,去類里找run方法压真。

d、實例分析:

//目的:因為使用了NSObject
#import <Foundation/Foundation.h>
//1蘑险、類的聲明
//聲明對象的屬性滴肿、行為
//NSObject 目的是:讓Car這個類具備創(chuàng)建對象的能力
//OC對象本身是結(jié)構(gòu)體

@interface Car : NSObject
{
    //@public可以讓外部的指針間接訪問對象內(nèi)部的成員變量
    @public
    
    //用來聲明對象屬性(成員變量,也叫實例變量佃迄,默認會初始化為0)
    int wheels;//輪胎的個數(shù)
    int speed;//時速(xxkm/h)

    //實例變量不允許在這里初始化 int wheels = 4這種寫法是錯誤的
    //不能隨便將成員變量當做C語言中的變量來使用 static int wheels;這種寫法是錯誤的
}

    //方法(行為): 方法名 泼差、 參數(shù) 贵少、返回值 (聲明、實現(xiàn))
    //只要是OC對象的方法堆缘,必須以減號 - 開頭
    //OC方法中任何數(shù)據(jù)類型都必須用小括號()括住
    //OC方法中的小括號()的作用只有一個:括住數(shù)據(jù)類型
    - (void) run;

    //類的聲明完畢

@end



//2滔灶、類的實現(xiàn)
//用來實現(xiàn)interface中聲明的方法
//方法的實現(xiàn)(說清楚方法里面有什么代碼)
@implementation Car
  
- (void) run
{
    //方法內(nèi)可直接訪問、調(diào)用成員變量
    NSLog(@"%d個輪子吼肥、%d車速的車跑起來了",wheels,speed);
}

  //類的實現(xiàn)完畢

@end


int main()
{
    //在使用類創(chuàng)建對象之前录平,會將類加載進內(nèi)存(只有一次),類的內(nèi)存里只存放方法列表
    //定義的對象內(nèi)部都有一個默認的isa指針,指向?qū)ο笏鶎?yīng)的類
    //OC中缀皱,想執(zhí)行一些行為斗这,就寫上一個中括號[行為執(zhí)行者,行為名稱]
    //利用類來創(chuàng)建對象
    //執(zhí)行了Car這個類的new行為來創(chuàng)建新的對象
    //OC中只能用指針變量來間接操作對象
    //定義了一個指針變量p,p將來指向的是Car類型的對象
    //[Car new]會創(chuàng)建出一個新對象啤斗,并且會返回新對象本身(新對象的地址)
    Car *p = [Car new];
    Car *p2 = [Car new]; //又創(chuàng)建出一個新對象p2

    //給p所指向?qū)ο蟮膚heels屬性賦值4
    p->wheels = 4;
    p2->speed = 300;
    
    //給p所指向?qū)ο蟀l(fā)送一條run消息 (OC中的消息機制)
    [p run];
    [p2 run];
    NSLog(@("p車有%d個輪胎,速度是%dkm/hnp2車有%d個輪胎,速度是%dkm/h"),p->wheels,p->speed,p2->wheels,p2->speed);
    
    //將p里存儲的地址值表箭,賦值給了p3,兩個指向的地址值是相同的钮莲,指向同一個對象
    Car *p3 = p;
    p3->speed = 200;
    [p run];
    [p3 run];
  
    //將p2里存儲的地址賦值給p
    p = p2;
    p->wheels = 3;
    [p run];
    [p2 run];

  return 0;
}

4免钻、對象跟函數(shù)參數(shù)

a、OC里的對象不能自動回收崔拥;
b极舔、書寫類和對象注意事項:
(1)不能嵌套包含;
(2)方法的實現(xiàn)不能寫在@interface中握童;
(3)方法的聲明不能寫在@implementation中姆怪;
(4)方法的聲明不能寫在定義屬性的大括號{}中,一定要寫在外面
(5)類內(nèi)不能寫其他新的類澡绩,想寫另一個類稽揭,應(yīng)寫在@interface 類名 : NSObject @end @implementation 類名 @end的外面;
(6)在函數(shù)內(nèi)不能直接寫對象的實例變量肥卡;
(7)實例變量不允許初始化賦值溪掀;
(8)不能隨便將實例變量當做C語言中的變量(實例變量不能用 static 修飾);
(9)類的聲明必須放在main函數(shù)前面步鉴,類的實現(xiàn)可以放在后面揪胃;
(10)@implementation沒有@interface也可以創(chuàng)建對象
(11)@implementation中不能聲明和@interface一樣的成員變量

5、方法與函數(shù)的區(qū)別

a氛琢、方法
(1)喊递、對象方法都是以減號 - 開頭,變量類型用()括住
(2)阳似、OC方法的聲明必須寫在@interface和@end之間骚勘,方法的實現(xiàn)必須寫在@implementation和@end之間。也就是說OC方法不能獨立于類存在
(3)、對象方法只能由對象來調(diào)用
(4)俏讹、對象方法歸類對象所有
b当宴、函數(shù)
(1)、函數(shù)能寫在文件中的任意位置(@interface和@end之間除外)泽疆,函數(shù)歸文件所有
(2)户矢、函數(shù)調(diào)用不依賴于對象
(3)、函數(shù)內(nèi)部不能直接通過成員變量名訪問某個對象的成員變量
成員變量可以是任意類型殉疼,也可以是其他對象

6梯浪、方法的聲明和實現(xiàn)

a、OC方法中株依,一個參數(shù)對應(yīng)一個冒號:驱证;
b、冒號的作用:分隔方法調(diào)用時的參數(shù)值恋腕;
c抹锄、不帶參數(shù)的方法`- (double)pi; 方法名為pi`
d、帶一個參數(shù)的方法
- (int)square : (int)num; 方法名為square :(冒號也是方法名的一部分)
e荠藤、帶多個參數(shù)的方法
- (int)sumWithNum1 : (int)num1 andNum2 : (int)num2; 
(方法名為 sumWithNum1: andNUm2: )
f伙单、同一個類中不允許兩個對象方法同名

7、匿名對象(沒有名字的對象)

@interface Car : NSObject
{
    @public
    int speed;
}
- (void) run;

@end


@implementation Car
- (void) run
{
    NSLog(@"%d個輪子哈肖、%d車速的車跑起來了",wheels,speed);
}
@end


int main()
{
    //屬性訪問
    [Car new]->speed = 300;
    
     //方法調(diào)用
    //每次都會創(chuàng)建新的對象吻育,所以speed的值是0
    [[Car new] run];
    return 0 ;
}

不要寫類似匿名對象這樣的代碼!!!

對象調(diào)用類方法 內(nèi)存分析示意圖
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市淤井,隨后出現(xiàn)的幾起案子布疼,更是在濱河造成了極大的恐慌,老刑警劉巖币狠,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件游两,死亡現(xiàn)場離奇詭異,居然都是意外死亡漩绵,警方通過查閱死者的電腦和手機贱案,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來止吐,“玉大人宝踪,你說我怎么就攤上這事“樱” “怎么了瘩燥?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長不同。 經(jīng)常有香客問我厉膀,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任站蝠,我火速辦了婚禮,結(jié)果婚禮上卓鹿,老公的妹妹穿的比我還像新娘菱魔。我一直安慰自己,他們只是感情好吟孙,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布澜倦。 她就那樣靜靜地躺著,像睡著了一般杰妓。 火紅的嫁衣襯著肌膚如雪藻治。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天巷挥,我揣著相機與錄音桩卵,去河邊找鬼。 笑死倍宾,一個胖子當著我的面吹牛雏节,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播高职,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼钩乍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了怔锌?” 一聲冷哼從身側(cè)響起寥粹,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎埃元,沒想到半個月后涝涤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡亚情,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年妄痪,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片楞件。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡衫生,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出土浸,到底是詐尸還是另有隱情罪针,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布黄伊,位于F島的核電站泪酱,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜墓阀,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一毡惜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧斯撮,春花似錦经伙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至溢十,卻和暖如春垮刹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背张弛。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工荒典, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人乌庶。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓种蝶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親瞒大。 傳聞我的和親對象是個殘疾皇子螃征,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法透敌,內(nèi)部類的語法盯滚,繼承相關(guān)的語法,異常的語法酗电,線程的語...
    子非魚_t_閱讀 31,631評論 18 399
  • 曾經(jīng)有段時間刷微博划滋,看到這樣一句話饵筑,我可以一個人吃飯也不覺得無聊,手機偶爾忘帶了也不會著急聯(lián)系不上誰处坪,我做著自己喜...
    微涼小喵閱讀 175評論 0 1
  • 最近, 樓主剛研究了一下藍牙.與大家分享一下其簡單原理, 對有些小伙伴會有幫助; 這里有一個藍牙的實例demo可以...
    木子冰洛閱讀 966評論 1 1
  • 我從來處來根资, 去往紅塵住架专。 萬般不由己, 歸來話菩提玄帕。 ???
    Doris十三閱讀 182評論 0 0
  • 離里約奧運會開幕已經(jīng)有好幾天了部脚,運動賽事也過去許多,勝負不知決出了多少場裤纹。中國以13金位列第二名睛低,其中又勝有敗,有...
    潔_寞碎閱讀 256評論 0 0