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