enhanced
C:加強C,C++
extends C:拓展C,object-c
object-c:在C語言的基礎上增加一層最小的面向對象的語法
OC向下兼容C
面試題1:爲什麼要使用import?import和include的區別?
include和import都是引入頭文件,而import引入頭文件可以防止重複包含
include它是使用預處理指令防止重複包含,如果沒有寫預處理指令,則無法防止重複包含
面試題2:import 和 @class的區別
面試題3:Foundation/Foundation.h的作用
1)頭文件
2)頭文件的位置 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h
3)文件包含了其他的大量頭文件
作用:把Foundation.h引入了,等於把OC的庫文件都引過來
@autoreleasepool:自動釋放池
NSLog函數
NSLog:是Cocoa框架提供的一個方法
面試題:NSLog和printf的差異
1、NSLog會自動換行,而printf不會自動換行
2、NSLog會自動輸出時間等項目信息
3、NSLog函數的參數是一個NSString對象,而printf函數的參數是一個字符串常量指針
4、NSLog不能使用%s輸出字符串,OC有特有的字符串類NSString
NS前綴:Next Software,防止命名重複
@:1、@“” 表示將字符串轉換爲NSString對象
2、@標識符 關鍵字
C與OC的對比
1、源文件對比
1)C語言:.c .o .out .h
2)OC:.m .h
2、基本語法對比
1)C中常用數據類型:基本數據類型,構造類型,指針類型,空類型,定義類型typedef
2)OC中的數據類型:兼容C基本數據類型(布爾型BOOL),Block類型,指針數據類型(類(class),id類型(萬能指針)),特殊類型(SEL、nil)
3、變量定義的差異
關鍵字:1、C語言的關鍵字都可以在OC中使用
2、OC中新增的關鍵字,注意以@開頭的
4、流程控制語句對比
1)if else
2)switch
3)while
4)do while
5)for
OC中並沒有增加新的流程控制,而是提供了一種增強型的for循環
//增強型for循環
NSArray
*arr = @[@"one",
@"two",
@"three"];
for
(NSString
*str in
arr) {
NSLog(@"%@",
str);
}
5、函數的定義和聲明差異
1)C語言
2)OC中把函數稱之爲方法
6、異常捕捉的方法@try...@catch...@finally
1)並不能檢測所有的錯誤
編程的實質:將我們的思維轉變成計算機能夠識別的語言的一個過程
面向過程:強調的是功能行爲,關注的是解決問題需要哪些步驟。
面對對象:將功能封裝進對象,強調具備了功能的對象。關注的是解決問題需要哪些對象,面對對象是基於面向過程的。
類:類是具有相似內部狀態和運動規律的實體的集合(或統稱、抽象)。
對象:即指現實世界中的各種各樣的實體,既可以是具體的事物也可以是指抽象的事物。
一個類可以實例化多個對象
類的構成:1、事物名稱(類名)
2、屬性
3、行爲(功能,類的方法)
類的抽象:擁有相同(或者類似)屬性和行爲的對象都可以抽象出一個類
抽象類的方法:一般名詞都是類(名詞提煉法)
類的聲明和實現
類:1、.h類的聲明文件,用於聲明成員變量、方法。類的聲明使用關鍵字@interface和@end
注意:聲明只是說明一下方法名、方法的返回值類型、方法接收得參數類型
2、.m類的實現文件,用於實現.h中聲明的方法。類的實現使用關鍵字@implementation和@end
方法:方法的聲明和實現,都必須以+或者-開頭
1、+ 表示類方法(靜態方法)
2、- 表示對象方法(動態方法)
3、在.h中聲明的多有方法作用域都是public類型,不能更改
成員變量(實例變量、屬性):1、@public 全局都可以訪問
2、@protected 只能在類的內部和子類中訪問
3、@private 只能在類內部訪問
類的定義分爲兩部分:
1)類的聲明(規定當前類的:類名、屬性、方法)
@interface
類名:父類名
NSObject
{
//類的屬性
}
//類的行爲
@end
2)類的實現(實現具體行爲)
@implementation
類名
//行爲的具體實現
@end
創建對象並訪問成員變量:1、[類名 new]; //類名:相當於定義一個結構體類型,新的類型
1)向計算機申請內存空間
2)給類中的每一個成員初始化值
3)返回新申請的空間的首地址
2、類名 *p = [類名 new]; //兩種理解方式
1)定義了一個類名類型的指針變量,指針變量指向新申請的內存空間
2)用該類實例化了一個實例對象,對象的名稱是p
3、用指針間接訪問實例變量值
1)p->屬性
無參方法的聲明和調用:1、行爲在@interface和@end之內,大括號之外
2、+類方法(不可以訪問成員變量),-對象方法(可以訪問成員變量)
3、-(void)方法名;
4、調用 [類名或對象名 方法];
有參方法的聲明和調用:1、方法類型(返回值類型)方法名:(參數類型) 參數名; //一個參數的方法
2、方法類型(返回值類型)方法名:(參數類型1)
參數名1 and:(參數類型2) 參數名2; //兩個參數
3、方法名: 方法名: and:
4、調用 [類名或對象名 方法名:參數 and:參數]; //類方法類名,對象方法對象名
5、and的後面還可以定義方法名→
and方法名:
#import
<Foundation/Foundation.h>
//iphone類的聲明
typedef
enum color{kColorWhite, kColorBlack, kColorTHJ} iColor;
@interface
iPhone : NSObject
{
//類的屬性
@public
//手機顏色
iColor
_color;
//手機的尺寸
float
_size;
//手機的CPU
NSString
*_cpu;
}
//類的行爲(方法)
//查看手機的信息
把手機的實例變量值打印出來
-(void)aboutMyPhone;
//打電話,需要一個參數,參數就是電話號碼
-(void)callPhone:(NSString
*) telNum;
//發短信,給指定號碼發送短信,短信的內容可以指定,兩個參數
-(void)sendMessage:(NSString
*) telNum andContent:(NSString
*) content;
@end
//iPhone類的實現
@implementation
iPhone
//行爲的具體實現
//查看手機的信息
把手機的實例變量值打印出來
-(void)aboutMyPhone {
NSLog(@"顏色:%d,
尺寸:%.2f, CPU:%@",
_color,
_size,
_cpu);
}
//打電話,需要一個參數,參數就是電話號碼
-(void)callPhone:(NSString
*) telNum {
NSLog(@"給
%@
打電話", telNum);
}
//發短信,給指定號碼發送短信,短信的內容可以指定,兩個參數
-(void)sendMessage:(NSString
*) telNum andContent:(NSString
*) content {
NSLog(@"給
%@
發短信,短信內容: %@", telNum, content);
}
@end
int
main(int
argc, const
char * argv[]) {
@autoreleasepool
{
//創建對象
iPhone
*iPhone7Plus = [iPhone
new];
//設定手機的信息
iPhone7Plus->_color
=
kColorTHJ;
iPhone7Plus->_cpu
=
@"A20";
iPhone7Plus->_size
=
7.9f;
//調用方法
[iPhone7Plus aboutMyPhone];
//給10086打電話
[iPhone7Plus callPhone:@"10086"];
//給10086發短信
[iPhone7Plus sendMessage:@"10086"
andContent:@"你好,請問聯通的電話多少?"];
}
return
0;
}