OC2
1.局部變量和全局變量以及成員變量的區(qū)別
寫(xiě)在類(lèi)聲明的大括號(hào)中的變量, 我們稱(chēng)之為 成員變量(屬性, 實(shí)例變量)
成員變量只能通過(guò)對(duì)象來(lái)訪(fǎng)問(wèn)
注意: 成員變量不能離開(kāi)類(lèi), 離開(kāi)類(lèi)之后就不是成員變量,成員變量不能在定義的同時(shí)進(jìn)行初始化
存儲(chǔ): 堆(當(dāng)前對(duì)象對(duì)應(yīng)的堆的存儲(chǔ)空間中)
存儲(chǔ)在堆中的數(shù)據(jù), 不會(huì)被自動(dòng)釋放, 只能程序員手動(dòng)釋放
?
?
寫(xiě)在函數(shù)和大括號(hào)外部的變量, 我們稱(chēng)之為全局變量
作用域: 從定義的那一行開(kāi)始, 一直到文件末尾
局部變量可以先定義在初始化, 也可以定義的同時(shí)初始化
存儲(chǔ): 靜態(tài)區(qū)
程序一啟動(dòng)就會(huì)分配存儲(chǔ)空間, 直到程序結(jié)束才會(huì)釋放
?
寫(xiě)在函數(shù)或者代碼塊中的變量, 我們稱(chēng)之為局部變量
作用域: 從定義的那一行開(kāi)始, 一直到遇到大括號(hào)或者return
局部變量可以先定義再初始化, 也可以定義的同時(shí)初始化
存儲(chǔ) : 棧
存儲(chǔ)在棧中的數(shù)據(jù)有一個(gè)特點(diǎn), 系統(tǒng)會(huì)自動(dòng)給我們釋放
?
2.函數(shù)和方法的區(qū)別
?1.函數(shù)屬于整個(gè)文件, 方法屬于某一個(gè)類(lèi)
?方法如果離開(kāi)類(lèi)就不行
?2.函數(shù)可以直接調(diào)用, 方法必須用對(duì)象或者類(lèi)來(lái)調(diào)用
?注意: 雖然函數(shù)屬于整個(gè)文件, 但是如果把函數(shù)寫(xiě)在類(lèi)的聲明中會(huì)不識(shí)別
?3.不能把函數(shù)當(dāng)做方法來(lái)調(diào)用, 也不能把方法當(dāng)做函數(shù)來(lái)調(diào)用
?
?方法的注意點(diǎn):
?>方法可以沒(méi)有聲明只有實(shí)現(xiàn)
?>方法可以只有聲明沒(méi)有實(shí)現(xiàn), 編譯不會(huì)報(bào)錯(cuò), 但是運(yùn)行會(huì)報(bào)錯(cuò)
?如果方法只有聲明沒(méi)有實(shí)現(xiàn), 那么運(yùn)行時(shí)會(huì)報(bào):?
?reason: '+[Person demo]: unrecognized selector sent to class 0x100001140'
?發(fā)送了一個(gè)不能識(shí)別的消息, 在Person類(lèi)中沒(méi)有+開(kāi)頭的demo方法
?reason: '-[Person test]: unrecognized selector sent to instance 0x100400000'
?
?
?類(lèi)也有一個(gè)注意點(diǎn):
?類(lèi)可以只有實(shí)現(xiàn)沒(méi)有聲明
?注意: 在開(kāi)發(fā)中不建議這樣寫(xiě)
?
3.常見(jiàn)錯(cuò)誤:
1.只有類(lèi)的聲明,沒(méi)有類(lèi)的實(shí)現(xiàn)
2.漏了@end
3. @interface和@implementation嵌套
4.成員變量沒(méi)有寫(xiě)在括號(hào)里面
5.方法的聲明寫(xiě)在了大括號(hào)里面
6.成員變量不能在{}中進(jìn)行初始化、不能被直接拿出去訪(fǎng)問(wèn)
7.方法不能當(dāng)做函數(shù)一樣調(diào)用
8.OC方法只能聲明在@interface和@end之間,只能實(shí)現(xiàn)在@implementation和@end之間。也就是說(shuō)OC方法不能獨(dú)立于類(lèi)存在
9.C函數(shù)不屬于類(lèi),跟類(lèi)沒(méi)有聯(lián)系,C函數(shù)只歸定義函數(shù)的文件所有
10.C函數(shù)不能訪(fǎng)問(wèn)OC對(duì)象的成員
11.低級(jí)錯(cuò)誤:方法有聲明,但是實(shí)現(xiàn)的時(shí)候?qū)懗闪撕瘮?shù)
12.OC可以沒(méi)有@interface同樣可以定義一個(gè)類(lèi)
?
4.字符串基本使用
NSString使用
只需要在C語(yǔ)言字符串前面加上@符號(hào), 系統(tǒng)就會(huì)自動(dòng)將C語(yǔ)言字符串轉(zhuǎn)換為OC字符串
C語(yǔ)言中的字符串不是對(duì)象;OC中的字符串是一個(gè)對(duì)象
?
注意: 輸出C語(yǔ)言的字符串使用%s
? ? ? ? ? 輸出OC的字符串使用%@,? %@就專(zhuān)門(mén)用于輸出對(duì)象類(lèi)型的
方法不能使用函數(shù)來(lái)實(shí)現(xiàn), 方法是方法, 函數(shù)是函數(shù)
方法屬于一個(gè)類(lèi), 函數(shù)屬于一個(gè)文件
?
5.結(jié)構(gòu)體作為對(duì)象的屬性
初始化結(jié)構(gòu)體屬性
方法一:強(qiáng)制轉(zhuǎn)換
stu->_birthday = (Date){1986, 1, 15};
?? ?
方法二:定義一個(gè)新的結(jié)構(gòu)體,給d賦值,將d賦值給_birthday
? ? Date d = {1986, 1, 15};
? ? stu->_birthday = d;
?
方法三:分別賦值
stu->_birthday.year = 1986;
stu->_birthday.month = 1;
stu->_birthday.day = 15;
?
6.對(duì)象作為方法的參數(shù)傳遞
7.對(duì)象作為方法的參數(shù)連續(xù)傳遞
?
8.#pragma mark 基本使用
//#pragma mark? 程序入口
?
9.對(duì)象作為返回值類(lèi)型
注意:在企業(yè)級(jí)開(kāi)發(fā)中千萬(wàn)不要隨意修改一個(gè)方法
通過(guò)new創(chuàng)建出來(lái)的對(duì)象存儲(chǔ)在堆中,堆中的數(shù)據(jù)不會(huì)自動(dòng)釋放
?
轉(zhuǎn)載于:https://www.cnblogs.com/micalafei/p/4774615.html
總結(jié)
- 上一篇: /sys/class/gpio 文件接口
- 下一篇: centos 7 nginx_insta