obeject-c語言簡介、基礎語法

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章