Objective-C 學(xué)習(xí)第一天

一弯汰、基礎(chǔ)語法

  1. OC相對于C
    a. 在C的基礎(chǔ)上新增了面向?qū)ο蟮恼Z言
    b. 將C的復(fù)雜、繁瑣的語法封裝的更為簡單
    c. OC完全兼容C語言

  2. OC程序的源文件后綴名是.m m代表message 代表OC當(dāng)中最重要的一個機(jī)制 消息機(jī)制
    C程序的源文件的后綴名.c

  3. main函數(shù)仍然是OC程序的入口和出口
    int類型的返回值代表程序的結(jié)束狀態(tài)
    main函數(shù)的參數(shù): 仍然可以接收用戶在運(yùn)行程序的時候傳遞數(shù)據(jù)給程序湖雹,
    參數(shù)也可以不要

  4. #import指令
    1). 以#號開頭咏闪,是1個預(yù)處理指令
    2). 作用: 是#include指令的增強(qiáng)版。將文件的內(nèi)容在預(yù)編譯的時候拷貝在寫指令的地方
    3). 增強(qiáng): 同一個文件無論#import多少次摔吏,只會包含一次
    如果#include指令要實(shí)現(xiàn)這個效果鸽嫂,就必須要配合條件編譯指令來實(shí)現(xiàn)
    而#import指令只需要直接包含就可以
    4). 簡要原理: #import指令在包含文件的時候,底層會先判斷這個文件是否被包含征讲,
    如果被包含就會被略過据某,否則才會包含诗箍。

  5. 框架
    1). 是一個功能集 蘋果或者第三方事先將一些程序在開發(fā)程序時經(jīng)常要用到的功能事先寫好
    把這些功能封裝在一個類或函數(shù)中滤祖,這些函數(shù)和類的集合就叫做框架氨距。
    有點(diǎn)像C語言的函數(shù)庫

    2). Foundation框架
    Foundation: 基礎(chǔ) 基本. 這個框架當(dāng)中提供了一些最基本的功能 輸入輸出俏让, 數(shù)據(jù)類型

     Foundation.h 這個文件當(dāng)中包含了Foundation包含了其他所有的頭文件
     只要包含F(xiàn)oundation.h就想當(dāng)于包含了框架當(dāng)中所有的頭文件首昔。
    
  6. @autoreleasepool{} 自動釋放池
    代碼寫在這個大括號中

  7. NSLog函數(shù)
    1). 作用: 是printf函數(shù)的增強(qiáng)版, 向控制臺輸出信息
    2). 語法:
    NSLog(@"格式控制字符串", 變量列表);
    最簡單語法:
    NSLog(@"要輸出的信息");
    3). 增強(qiáng):
    a. 輸出一些調(diào)試相關(guān)的信息
    2020-07-01 12:40:05.175 Day01-OC基礎(chǔ)用法 [792:213878] Hello,World
    執(zhí)行代碼的時間 程序名稱 792是進(jìn)程編號,213878是線程編號 輸出信息
    可用于測試程序執(zhí)行時間
    b. 會自動換行
    c. OC新增的數(shù)據(jù)類型的變量的值只能使用NSLog函數(shù)輸出
    4). 用法和printf函數(shù)差不多
    5). 使用注意:
    a. NSLog函數(shù)的第一個參數(shù)前面必須要加1個@符號
    b. 如果在字符串的末尾加1個'\n'代表換行, 那么函數(shù)的自動換行會失效

  8. 字符串
    1). C語言的字符串的存儲方式
    a. 使用字符數(shù)組存儲
    b. 使用字符指針
    2). OC當(dāng)中更為好用的存儲字符串的類型. NSString
    NSString類型的指針變量專門用來存儲OC字符串的地址
    3). OC的字符串必須要使用1個前綴@符號
    "jack" 是一個C語言的字符串
    @"jack" 是一個OC的字符串常量
    NSString 類型的指針變量只能存儲OC字符串的地址
    4). 使用
    NSString *str = @"jack";
    5). 總結(jié)
    a. 在OC中專門設(shè)計了1個NSString類型來存儲字符串
    b. 字符串分為C字符串和OC字符串
    c. 區(qū)分: 是否有@前綴
    6). 注意
    a. NSLog函數(shù)的第1個參數(shù)是OC字符串
    b. 輸出
    NSString *str = @"jack";
    NSLog(str);
    c. 如果要使用NSLog函數(shù)中的占位符輸出字符串的值, 應(yīng)使用"%@"

  9. NS前綴
    NextStep --> Cocoa --> Foundation框架之中

  10. @符號
    1). 將C字符串轉(zhuǎn)換為OC字符串
    "jack" ->> @"jack"
    2). OC當(dāng)中的絕大部分關(guān)鍵字是以@符號開頭

  11. 注釋:
    和C語言的注釋一模一樣, 分為單行注釋和多行注釋

  12. 函數(shù)的定義和調(diào)用: 與C語言的函數(shù)調(diào)用是一樣的
    void test();// 聲明
    void test(){// 實(shí)現(xiàn)

    }

二巧骚、OC與C的對比

  1. OC程序的編譯劈彪、鏈接沧奴、執(zhí)行
    1). 在.m文件中寫上符合OC程序的源代碼
    2). 使用編譯器將源代碼編譯為目標(biāo)文件
    cc -c xx.m
    a. 預(yù)處理
    b. 檢查語法
    c. 編譯
    3). 鏈接
    cc xx.o
    如果程序中使用到了框架中的函數(shù)或者類,那么在鏈接時就必須要告訴編譯器去哪里找Foundation框架
    cc xx.o -framework Foundation
    4). 鏈接成功后, 就會生成1個a.out可執(zhí)行文件, 使用"./a.out"執(zhí)行

  2. OC程序和C程序各個階段的后綴名對比

    源文件 目標(biāo)文件 可執(zhí)行文件
    C .m .o .out
    OC .m .o .out

  1. OC中的數(shù)據(jù)類型
    1). OC中支持C語言中的所有的數(shù)據(jù)類型
    a. 基本數(shù)據(jù)類型
    int double float char
    b. 構(gòu)造類型
    數(shù)組 結(jié)構(gòu)體 枚舉
    c. 指針類型
    d. 空類型
    e. typedef自定義類型
    2). BOOL 類型
    BOOL b1;
    a. 可以存儲YES或者NO中的任意1個數(shù)據(jù)(必須是大寫).
    b. 一般情況下BOOL類型的變量用來存儲條件表達(dá)式的結(jié)果.
    c. BOOL的本質(zhì)
    typedef signed char BOOL;
    實(shí)際上BOOL類型的變量是1個有符號的char變量
    #define YES ((BOOL)1)
    #define NO ((BOOL)0)
    4). Boolean
    a. Boolean類型的變量可以存儲true或者false
    b. 一般情況下BOOL類型的變量用來存儲條件表達(dá)式的結(jié)果.
    c. 本質(zhì)
    typedef unsigned char Boolean;
    #define true 1
    #define false 0
    5). class 類型. 類
    6). id 類型 萬能指針.
    7). nil 與 null 差不多
    8). SEL 方法選擇器
    9). block 代碼段

三、 面向過程與面向?qū)ο?/p>

  1. OC是在C的基礎(chǔ)之上
    1). 將C復(fù)雜的語法封裝的更為簡單
    2). 在C語言的基礎(chǔ)之上新增了一小部分的面向?qū)ο蟮恼Z法

  2. 實(shí)現(xiàn)需求之一:
    1). 要把大象放進(jìn)冰箱應(yīng)該怎么辦?
    a. 打開冰箱門
    b. 把冰箱放進(jìn)去
    c. 把冰箱門關(guān)上

    2). 買電腦的需求的實(shí)現(xiàn)方式:
    a. 根據(jù)自己的需求和預(yù)算確定買的電腦型號
    10000 iOS開發(fā)
    b. 在網(wǎng)上查資料 確定型號
    rMMP 9288
    c. 去到數(shù)碼產(chǎn)品中心
    d. 找到Apple專賣店
    e. 砍價 成交
    f. 回家

    3). 更好的方式:
    a. 自己做
    強(qiáng)調(diào)的是過程, 步驟. 我是主角
    b. 別人做
    強(qiáng)調(diào)的比人. 我是指揮者

    面向過程: 如果解決1件事情的時候嚣潜,每一件事情都是我們親自去一步步實(shí)現(xiàn)
    面向?qū)ο? 如果解決1件事情的時候郑原,自己不去做犯犁,而是專門找一個人去做

  3. 代碼世界的面向過程與面向?qū)ο?
    1). 面向過程
    在遇到1個需求的時候酸役,每個步驟都是自己親自寫代碼完成
    2). 面向?qū)ο?br> 在遇到1個需求的時候涣澡,而是找一個專門做這件事的人

  4. 面向?qū)ο蠛兔嫦蜻^程優(yōu)缺點(diǎn)
    C語言是一門面向過程的語言. 有功能的概念, 但是沒有人的概念.
    OC語言是一門面向?qū)ο蟮恼Z言.

    面向過程解決問題的缺點(diǎn): 后期維護(hù)和修改不方便.
    面向?qū)ο蠼鉀Q問題的優(yōu)點(diǎn): 后期維護(hù)和修改方便.

  5. 如何使用面向?qū)ο笤O(shè)計程序
    當(dāng)遇到一個需求的時候入桂,不要親自去實(shí)現(xiàn).
    1). 先看看有沒有現(xiàn)成的框架做這件事
    2). 如果沒有抗愁,就自己實(shí)現(xiàn)

  6. 對象: 現(xiàn)實(shí)生活中的一個具體存在, 看得見蜘腌、摸得著撮珠,拿過來可以直接使用

  7. 類: 是對一群具有相同特征或者行為的事物的統(tǒng)稱.抽象的,不能直接使用.

  8. 類和對象之間的關(guān)系

四芯急、 類與對象

  1. 請問先有類還是先有對象
    1). 現(xiàn)實(shí)角度 一定是先有對象再有類
    2). 代碼角度 一定是先有類再有對象

  2. 類的作用: 描述一群具有相同特征和行為的事物

  3. 如何定義類
    1). 類的三要素: 類名/特征/行為
    2). 定義類的語法
    a. 位置. 直接寫在源文件中
    b. 類的定義分為兩部分
    --> 類的聲明
    @interface 類名 : NSObject
    {
    這類事物具有的共同特征, 將他們定義為變量
    }
    功能就是方法娶耍,將聲明寫在這里
    @end
    --> 類的實(shí)現(xiàn)
    @implementation 類名
    將方法的實(shí)現(xiàn)寫在這里
    @end
    3). 注意
    a. 類必須要有聲明和實(shí)現(xiàn)
    b. 類名用你描述事物的名稱來命名.
    類名的每個單詞單詞首字母必須要大寫.
    c. 用來表示這類事物共同特征的變量必須要定義在@interface中的大括號中
    d. 定義在大括號用來表示類事物共同特征的變量叫屬性伺绽、成員變量澜掩、實(shí)例變量杖挣、字段...
    e. 屬性名必須要以下劃線開頭

    示例:

        // 聲明
        @interface Person : NSObject
        {
            NSString *_name;
            int _age;
            float _height;
        }
        @end
    
        // 實(shí)現(xiàn)
        @implementation Person
    
        @end
    
    
  4. 類是無法直接使用的. 如果非要使用這個類,必須要先找到這個類的具體存在

    1). 如何創(chuàng)建一個類的對象
    語法: 類名 *對象名 = [類名 new];
    Person *p1 = [Person new];//創(chuàng)建Person對象
    p1對象的特點(diǎn):
    ->> 可以直接使用
    ->> 類定定義的東西, 對象都有

  5. 如何使用對象

    1). 如何訪問對象的屬性:
    a. 默認(rèn)情況下株汉,對象的屬型是不允許被外界直接訪問的
    如果允許對象的屬性可以被外界訪問歌殃,聲明屬性時加@public關(guān)鍵字
    b. 訪問對象的屬性的方式
    對象名->屬性名 = 值;
    對象名->屬性名;
    (對象名).屬性名 = 值;
    (
    對象名).屬性名

    示例:

        // 聲明
        @interface Person : NSObject
        {
            @public
            NSString *_name;
            int _age;
            float _height;
        }
        @end
    
        // 實(shí)現(xiàn)
        @implementation Person
    
        @end
    
    
        // 使用-- 平時建議使用這種形式
        Person *p1 = [Person new];
        p1->_name = @"jack";
        p1->_age = 19;
        p1->_height = 178.5f;
    
        NSLog(@"p1對象的_name屬性的值是%@", p1->_name);
    
        (*p1)._name = @"jack";
        (*p1)._age = 19;
        (*p1)._height = 178.5f;
    
    
  6. 方法的聲明和調(diào)用

        // 聲明
        @interface Person : NSObject
        {
            屬性: 類的特征
        }
        方法: 類的功能
        @end
    
        // 實(shí)現(xiàn)
        @implementation Person
        方法實(shí)現(xiàn)
        @end
    
  7. 無參數(shù)方法聲明
    1). 聲明
    a. 位置: 在@interface的大括號的外面
    b. 語法:
    - (返回值類型) 方法名稱;
    - (void)run;
    表示聲明了1個無返回值的并且無參數(shù)的方法, 名字叫run
    2). 實(shí)現(xiàn)
    a. 位置: 在@implementation之中實(shí)現(xiàn)
    b. 語法: 將方法聲明拷貝到@implementation中,去掉分號追加大括號

    3). 調(diào)用
    a. 方法是無法直接調(diào)用的, 必須要創(chuàng)建對象
    b. 調(diào)用對象的方法.
    [對象名 方法名];

    示例:

        // 聲明
        @interface Person : NSObject{
            NSString *_name;
            int _age;
        }
        - (void)run;
        @end
    
        // 實(shí)現(xiàn)
        @implementation Person
        - (void)run{
            NSLog(@"Hello,World!");
        }
        @end
    
        // 調(diào)用
        Person *p1 = [Person new];
        [p1 run];
    
    
  8. 帶1個參數(shù)的方法
    1). 聲明
    a. 位置: 在@interface的大括號的外面
    b. 語法:
    - (返回值類型) 方法名稱:(參數(shù)的類型)形參名稱;
    - (void)eat:(NSString *)foodName;
    表示聲明了1個無返回值的含有一個參數(shù)的方法, 名字叫"eat:",有一個參數(shù)類型是NSString *類型路召,參數(shù)的名字叫foodName
    2). 實(shí)現(xiàn)
    a. 位置: 在@implementation之中實(shí)現(xiàn)
    b. 語法: 將方法聲明拷貝到@implementation中,去掉分號追加大括號

    3). 調(diào)用
    a. 方法是無法直接調(diào)用的, 必須要創(chuàng)建對象
    b. 調(diào)用對象的方法.
    [對象名 方法名:實(shí)參];

    示例:

        // 聲明
        @interface Person : NSObject{
            NSString *_name;
            int _age;
        }
        - (void)run;
        - (void)eat:(NSString *)foodName;
        @end
    
        // 實(shí)現(xiàn)
        @implementation Person
        - (void)run{
            NSLog(@"Hello,World!");
        }
    
        - (void)eat:(NSString *)foodName{
            NSLog(@"給我的%@真好吃",foodName);
        }
        @end
    
        // 調(diào)用
        Person *p1 = [Person new];
        [p1 run];
        [p1 eat:@"紅燒排骨"];
    
    

    方法頭中的數(shù)據(jù)類型都要用1個小括號括起來.

    • (返回值類型)方法名稱:(參數(shù)類型)參數(shù)名稱;
  9. 帶多個參數(shù)的方法
    1). 聲明
    a. 位置: 在@interface的大括號的外面
    b. 語法:
    - (返回值類型) 方法名稱:(參數(shù)的類型)參數(shù)名稱1 :(參數(shù)類型)參數(shù)名稱2.股淡。唯灵。;
    - (int)sum:(int)num1 :(int)num2;
    表示聲明了1個返回值為int的含有兩個參數(shù)的方法, 名字叫"sum: :",有兩個參數(shù) 參數(shù)類型都是int類型, 參數(shù)名稱叫做num1,num2
    2). 實(shí)現(xiàn)
    a. 位置: 在@implementation之中實(shí)現(xiàn)
    b. 語法: 將方法聲明拷貝到@implementation中,去掉分號追加大括號

    3). 調(diào)用
    a. 方法是無法直接調(diào)用的, 必須要創(chuàng)建對象
    b. 調(diào)用對象的方法.
    [對象名 方法名:實(shí)參1 :實(shí)參2];

    示例:

        // 聲明
        @interface Person : NSObject{
            NSString *_name;
            int _age;
        }
        - (void)run;
        - (void)eat:(NSString *)foodName;
        - (int)sum:(int)num1 :(int)num2;
        @end
    
        // 實(shí)現(xiàn)
        @implementation Person
        - (void)run{
            NSLog(@"Hello,World!");
        }
    
        - (void)eat:(NSString *)foodName{
            NSLog(@"給我的%@真好吃",foodName);
        }
    
        - (int)sum:(int)num1 :(int)num2{
            int num3 = num1 + num2;
            return num3;
        }
        @end
    
        // 調(diào)用
        Person *p1 = [Person new];
        [p1 run];
        [p1 eat:@"紅燒排骨"];
        int sum = [p1 sum:10 :20];
        NSLog(@"sum = %d",sum);
    
    
  10. 帶參數(shù)的方法聲明的規(guī)范:--提高閱讀性.
    1). 如果方法只有1個參數(shù): 要去最好這個方法的名字叫做xxxWith:
    - (void)eatWithFood:(NSString *)foodName;
    2). 如果方法有多個參數(shù): 方法名With: (參數(shù)類型)參數(shù)名稱1 and:(參數(shù)類型)參數(shù)名稱2;
    - (int)sum:(int)num1 and:(int)num2;
    3). 更詳細(xì)的寫法
    方法名With參數(shù)1:(參數(shù)類型)參數(shù)名稱1 and參數(shù)2:(參數(shù)類型)參數(shù)名稱2...

  1. 其他使用注意
    1). 快捷
    a. 快速實(shí)現(xiàn)方法: - -> 空格 方法名
    b. 快速創(chuàng)建對象: 對象 new -> 右括號(自動補(bǔ)齊)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末大脉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌秤标,老刑警劉巖宙刘,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衙猪,死亡現(xiàn)場離奇詭異垫释,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)显蝌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門曼尊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來骆撇,“玉大人父叙,你說我怎么就攤上這事高每【洌” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵运授,是天一觀的道長吁朦。 經(jīng)常有香客問我逗宜,道長空骚,這世上最難降的妖魔是什么囤屹? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任肋坚,我火速辦了婚禮肃廓,結(jié)果婚禮上盲赊,老公的妹妹穿的比我還像新娘档礁。我一直安慰自己呻澜,他們只是感情好羹幸,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布栅受。 她就那樣靜靜地躺著屏镊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪律罢。 梳的紋絲不亂的頭發(fā)上误辑,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天巾钉,我揣著相機(jī)與錄音砰苍,去河邊找鬼师骗。 笑死,一個胖子當(dāng)著我的面吹牛荐捻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播厂置,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼昵济,長吁一口氣:“原來是場噩夢啊……” “哼访忿!你這毒婦竟也來了斯稳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎憎茂,沒想到半個月后竖幔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體板乙,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年赏枚,在試婚紗的時候發(fā)現(xiàn)自己被綠了亡驰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡饿幅,死狀恐怖凡辱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情栗恩,我是刑警寧澤透乾,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站磕秤,受9級特大地震影響乳乌,放射性物質(zhì)發(fā)生泄漏汉操。R本人自食惡果不足惜芒篷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一篡帕、第九天 我趴在偏房一處隱蔽的房頂上張望贮尉。 院中可真熱鬧败砂,春花似錦览芳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至舀射,卻和暖如春山林,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鹉胖。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評論 2 351

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