【學(xué)習(xí)筆記】Objective-C_語法基礎(chǔ)(一)

Objecitive-C基礎(chǔ)教程-基礎(chǔ)語法

Objective-C 是一種簡單的計算機(jī)語言婶芭,設(shè)計為可以支持真正的面向?qū)ο缶幊獭?/p>

Objective-C 通過提供類定義,方法以及屬性的語法,還有其他可以提高類的動態(tài)擴(kuò)展能力的結(jié)構(gòu)等第租,擴(kuò)展了標(biāo)準(zhǔn)的 ANSI C 語言蹄皱。類的語法和設(shè)計主要是基于 Smalltalk,最早的面向?qū)ο缶幊陶Z言之一吨娜。

如果你以前使用過其他面向?qū)ο缶幊陶Z言,那么下面的信息可以幫助你學(xué)習(xí) Objective-C 的基本語法淘钟。許多傳統(tǒng)的面向?qū)ο蟾拍罨略绶庋b,繼承以及多態(tài)米母,在 Objective-C 中都有所體現(xiàn)勾扭。這里有一些重要的不同,但是這些不同在這文章會表現(xiàn)出來铁瞒,而且如果你需要還有更多詳細(xì)的信息存在妙色。

如果你從來沒有使用任何編程語言編過程序,那么你至少需要在開始之前慧耍,對相關(guān)概念進(jìn)行一些基礎(chǔ)的了解身辨。對象的使用和對象對象架構(gòu)是 iPhone 程序設(shè)計的基礎(chǔ),理解他們?nèi)绾谓换?chuàng)建你的程序非常重要芍碧。想了解面向?qū)ο蟾拍畹幕蜕海垍⒖词褂?Objective-C 進(jìn)行面向?qū)ο缶幊獭?/p>

Objective-C:C的超集

Objective-Objective-C是C語言的嚴(yán)格超集--任何C語言程序不經(jīng)修改就可以直接通過Objective-C編譯器,在Objective-C中使用C語言代碼也是完全合法的师枣。Objective-C被描述為蓋在C語言上的薄薄一層怪瓶,因為Objective-C的原意就是在C語言主體上加入面向?qū)ο蟮奶匦浴?/p>

Objective-C代碼的文件擴(kuò)展名

擴(kuò)展名 內(nèi)容類型
.h 頭文件萧落。頭文件包含類践美,類型,函數(shù)和常數(shù)的聲明找岖。
.m 源代碼文件陨倡。這是典型的源代碼文件擴(kuò)展名,可以包含 Objective-C 和 C 代碼许布。
.mm 源代碼文件兴革。帶有這種擴(kuò)展名的源代碼文件,除了可以包含Objective-C和C代碼以外還可以包含C++代碼蜜唾。僅在你的Objective-C代碼中確實需要使用C++類或者特性的時候才用這種擴(kuò)展名杂曲。

當(dāng)你需要在源代碼中包含頭文件的時候,你可以使用標(biāo)準(zhǔn)的 #include 編譯選項袁余,但是 Objective-C 提供了更好的方法擎勘。#import 選項和 #include 選項完全相同,只是它可以確保相同的文件只會被包含一次颖榜。Objective-C 的例子和文檔都傾向于使用 #import棚饵,你的代碼也應(yīng)該是這樣的煤裙。

語法

Objective-C的面向?qū)ο笳Z法源于Smalltalk消息傳遞風(fēng)格。所有其他非面向?qū)ο蟮恼Z法噪漾,包括變量類型硼砰,預(yù)處理器(preprocessing),流程控制欣硼,函數(shù)聲明與調(diào)用皆與C語言完全一致题翰。但有些C語言語法合法代碼在objective-c中表達(dá)的意思不一定相同,比如某些布爾表達(dá)式分别,在C語言中返回值為true遍愿,但在Objective-C若與yes直接相比較,函數(shù)將會出錯耘斩,因為在Objective-C中yes的值只表示為1沼填。
第一個 Objective-C 程序,基于Xcode :


#import <Foundation/Foundation.h>

int main(int argc, char *argv[]) {

    @autoreleasepool {
        NSLog(@"Hello World!");
    }

   return 0;
}

1.什么是對象括授?

對象是現(xiàn)實生活中的1個具體存在坞笙。看得見荚虚、摸得著薛夜,拿過來直接可以使用。

2.什么是類版述?

類是對一群具有相同特征或者行為事物的1個統(tǒng)稱梯澜,抽象的。不能夠直接使用渴析。

案例:

食物. -->類
水果. -->類
桌子上的那一個水果. -->對象

交通工具. -->類
汽車. -->類
公司門口的那一輛奔馳. -->對象

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

  • 類是模板晚伙,類的對象是根據(jù)這個模板創(chuàng)建出來的。
  • 類模板中有什么俭茧,對象中就有什么咆疗。

4.如何設(shè)計類

類的作用:

  • 用來描述一群具有相同特征和行為的事物

設(shè)計類的三要素:

1.類的名字,你要描述這類事物的名字母债。
2.這類事物具有的相同的特征午磁,這類事物擁有什么。
3.這類事物具有的共同的行為毡们,這類事物會做什么迅皇。

5.如何找到類

  • 名詞提煉法:分析整個業(yè)務(wù)流程,分析出現(xiàn)了哪些名詞衙熔,這些名詞就是你要找的類登颓。

類的定義

問題:請問是先有類還是先有對象?

從現(xiàn)實的角度:一定先有對象再有類青责。
從代碼的角度:一定先有類再有對象挺据。

  • 如何定義類

    1.類的三要素取具。
    2.定義類的語法。

    a.位置:直接寫在源文件之中扁耐,不要寫在main函數(shù)之中暇检。
    b.類的定義:

      ->類的聲明:
     
    @interface 類名:NSObject 
     {
          這類事物具有的共同特征。將它們定義為變量婉称。
     }
     
   功能就是一個方法块仆。此處寫方法的聲明。
     
    @end
     
     ->類的實現(xiàn):
     
    @implementation 類名
     
    此處寫方法的實現(xiàn)王暗。
     
   @end  
#import<Foundation/Foundation.h>

@interface Preson : NSObject
{
    NSString *_name;
    int _age;
    float _height;
}

@end

@implementation Preson

@end

int mian(int argc, const char * argv[])
{
    

    return 0;
}

注意:

  1. 類必須要有聲明和實現(xiàn)悔据;
  2. 類名用描述的事物名稱命名,類名單詞首字母必須大寫俗壹;
  3. NSObject
  4. 用來表示這類事物的共同的特征的變量必須要定義在@interface的大括號之中科汗;
  5. 定義在大括號之中用來表示這類事物的共同的特征的變量叫做屬性、成員變量绷雏、實例變量头滔、字段
  6. 為類定義屬性時涎显,屬性名必須以_開頭坤检。
  • 語法是固定的:
@interface 類名:NSOnject
{
   這類事物具有的共同的特征定義為變量;
   數(shù)據(jù)類型 變量名1期吓;
   數(shù)據(jù)類型 變量名2早歇;
   ......
}
@end

@implementation 類名

@end

6.如何創(chuàng)建類的對象

語法:

類名 *對象名 = [類名 new];

Preson *p1 = [Preson new];

根據(jù)Person這個類的模板,創(chuàng)建了1個對象的名字叫p1.
p1對象的特點:

1讨勤、可以直接使用箭跳;
2、類中定義的東西悬襟,這個對象中也有衅码,不會多也不會少拯刁。

7.如何使用對象

  • 如何訪問對象中的屬性

    1.默認(rèn)情況下脊岳,對象的屬性是不允許被外界直接訪問的;
    2.如果允許對象的屬性可以被外界訪問垛玻,那么就在聲明屬性的時候加一個@public關(guān)鍵字割捅。

  • 訪問對象的屬性的方式

    對象名 -> 屬性名 = 值;    // 為對象中的屬性賦值
    對象名 -> 屬性名;      // 取出屬性值 (一般使用這一種取值方式)
    (*對象名).屬性名;   // 取出屬性值```
    
    

案例

寫一個學(xué)生類帚桩, 屬性:姓名 年齡 語文成績 數(shù)學(xué)成績 英語成績

#import <Foundation/Foundation.h>
       @interface Student : NSObject    // 創(chuàng)建學(xué)生類 
       {
           @public
           NSString *_name;
           int _age;
           int _Chinese;
           int _Math;
           int _English;
       }
       @end
       @implementation Student
       @end 
       int main(int argc, const char * argv[])
       { 
               Student *s1 = [Student new];     //創(chuàng)建對象  
               s1->_name = @"Barry";      // 給對象賦值
               s1->_age = 18;
               s1->_Math = 100;
               s1->_English = 98;
               s1->_Chinese = 60 ;
               NSLog(@"s1對象的姓名是%@,年齡是%d,數(shù)學(xué)成績亿驾、英語成績、語文成績分別是:%d,%d,%d",   //輸出定義的屬性值账嚎;
                     s1->_name,
                     s1->_age,
                     s1->_Math,
                     s1->_English,
                     s1->_Chinese);
       }

8.方法的聲明實現(xiàn)調(diào)用

1.類的聲明和實現(xiàn)

     ->類的聲明 :
     
     @interface 類名:NSObject 
     {
          屬性:屬性表示類的特征莫瞬。  
     }
     
     方法的聲明儡蔓,方法表示類的功能。
     
     @end
     
     ->類的實現(xiàn):
     
     @implementation 類名
     
     方法的實現(xiàn)疼邀。
     
     @end

2.一類事物不僅具有相同的特征喂江,還具有相同的行為。

行為就是一個功能旁振,C語言中使用函數(shù)來表示一個功能获询;
OC的類具有行為,我們使用方法來表示..

方法和函數(shù)都表示一個功能拐袜。

3.無參數(shù)的方法吉嚣。

  • 聲明

    a.位置:在@interface的大括弧外面。

    b.語法:-(返回值類型)方法名稱;

    **方法頭中的數(shù)據(jù)類型一定要用小括號括起來蹬铺!**
    
  • 實現(xiàn)

    a.位置:在@implementation之中實現(xiàn)尝哆;

    b.語法:將方法的聲明拷貝到@implementation之中,去掉分號甜攀,加上大括號{};

  • 調(diào)用

    a.方法是無法直接調(diào)用较解,因為類是不能直接使用的,必須要先創(chuàng)建對象赴邻,那么這個對象中就有類中的屬性和方法了印衔。

    b.調(diào)用對象的方法:[對象名 方法名];

案例

#import <Foundation/Foundation.h>

@interface Porson : NSObject
{
    NSString *_name;
    int _age;
}

-(void)Run;

@end

@implementation Porson

-(void)Run{
    NSLog(@"This is Test!");
}
@end

int main(int argc, const char * argv[])
{
    Porson *p1 = [Porson new];
    
    [p1 Run];
  
}

4.有一個參數(shù)的方法

  • 聲明

    a.位置:在@interface的大括弧外面。

    b.語法:-(返回值類型)方法名稱:(參數(shù)類型)形參名稱姥敛; 例:-(void)eat:(NSString *)foodName;

    **方法頭中的數(shù)據(jù)類型一定要用小括號括起來奸焙!**
    
  • 實現(xiàn)

    a.位置:在@implementation之中實現(xiàn);

    b.語法:將方法的聲明拷貝到@implementation之中彤敛,去掉分號与帆,加上大括號{}將方法實現(xiàn)的代碼寫在大括號之中;

  • 調(diào)用

    a.方法是無法直接調(diào)用,因為類是不能直接使用的墨榄,必須要先創(chuàng)建對象周霉,那么這個對象中就有類中的屬性和方法了碴里。

    b.調(diào)用的語法:[對象名 方法名:實參];

案例

#import <Foundation/Foundation.h>

@interface Porson : NSObject
{
    NSString *_name;
    int _age;
}

-(void)eat:(NSString *)foodName;

@end

@implementation Porson

-(void)eat:(NSString *)foodName{
    
    NSLog(@"主人給我的%@真好吃!",foodName);
    
}
@end

int main(int argc, const char * argv[])
{
    Porson *p1 = [Porson new];
    
    [p1 eat:@"紅燒肉"];
  
}

5.帶多個參數(shù)的方法

  • 聲明

    a.位置:在@interface的大括弧外面。

    b.語法:-(返回值類型)方法名稱:(參數(shù)類型)形參名稱1 方法名稱:(參數(shù)類型)形參名稱2 :(參數(shù)類型)形參名稱3孵睬;

    例:-(int)sum:(int)num1 :(int)num2 :(int)num3;

  **方法頭中的數(shù)據(jù)類型一定要用小括號括起來采记!**
  • 實現(xiàn)

    a.位置:在@implementation之中實現(xiàn)够吩;

    b.語法:將方法的聲明拷貝到@implementation之中战授,去掉分號,加上大括號{}將方法實現(xiàn)的代碼寫在大括號之中;

  • 調(diào)用

    a.方法是無法直接調(diào)用背稼,因為類是不能直接使用的贰军,必須要先創(chuàng)建對象,那么這個對象中就有類中的屬性和方法了蟹肘。

    b.調(diào)用的語法:[對象名 方法名:實參1 :實參2 :實參3];

案例

#import <Foundation/Foundation.h>

@interface Porson : NSObject
{
    NSString *_name;
    int _age;
}

-(int)sum:(int)num1 :(int)num2 :(int)num3;

@end

@implementation Porson

-(int)sum:(int)num1 :(int)num2 :(int)num3{
    
    int num4 = num1 + num2 + num3;
    
    return num4;
    
}
@end

int main(int argc, const char * argv[])
{
    Porson *p1 = [Porson new];
    
    int sum = [p1 sum:10 :10 :25];
    
    NSLog(@"num4 = %d",sum);
  
}

帶參數(shù)的方法聲明規(guī)范

1.如果方法只有一個參數(shù)

要求最好這個方法的名字叫做 xxxWith:
例:-(void)eatWith:(NSString *)foodName; //調(diào)用方法時词疼,增強(qiáng)代碼的完整可讀性

2.如果方法有多個參數(shù)

要求最好這個方法的名字叫做xxxWith:(參數(shù)類型)參數(shù)名稱 and:(參數(shù)類型)參數(shù)名稱 and:(參數(shù)類型)參數(shù)名稱 and:
例1: -(void)sumWith:(int)num1 and:(int)num2 and:(int)num3;
例2: -(void)sumWithNum1:(int)Num1 andNum2:(int)Num2 andNum3:(int)Num3;

注意:

  • 同一個類可以創(chuàng)建無數(shù)個對象俯树;
  • 同一個類的多個對象之間毫無關(guān)系,雖然它們擁有相同類型的屬性和方法贰盗,屬性的值是不會相互影響的聘萨;
  • 在方法實現(xiàn)當(dāng)中,可以直接訪問屬性童太;此方法是通過哪一個對象來調(diào)用的米辐,那么方法中的直接訪問的屬性就是哪個對象的

案例

寫一個Student類, 屬性: 體重;

方法1: 跑步: 每跑一次步书释,體重-0.5;
方法2: 吃飯: 每吃一次飯翘贮,體重+0.7;

 #import <Foundation/Foundation.h>
    
    @interface Student : NSObject
    {
        @public
        NSString *_name;
        float _weight;
    }
    
    - (void)Run;
    - (void)Eat;
    
    @end
   
    @implementation Student
    
    - (void)Run{
            
            NSLog(@"跑步,每跑一次,%@的體重就輕了爆惧!",_name);
            
        _Weight -= 0.5f ;
            
            NSLog(@"跑完了狸页,%@的體重是%.2f!",_name,_weight);
                 
        }
        
    - (void)Eat{
            
            NSLog(@"吃東西,每吃一次扯再,%@的體重就增長了芍耘!",_name);
            
           _weight += 0.7f ;
           
            NSLog(@"吃完了,%@的體重是%.2f",_name,_weight);
       }
        
   @end
              
        int main(int argc, const char * argv[])
       {
           Student *p1 = [Student new];
            
           p1->_name = @"Barry";
            
            p1->_weight = 99.9f ;
           
           [p1 Run];
           [p1 Eat];
           [p1 Run];
           [p1 Eat];                      
        }

9.作業(yè)

設(shè)計一個“Student”類
1.屬性

姓名
生日
年齡
身高(單位是m)
體重(單位是kg)
性別
C語言成績
OC成績
IOS成績

2.行為

跑步:每跑一次熄阻,身高增加1cm斋竞,體重減少0.5kg,輸出跑完后的體重秃殉;
吃飯:每吃一次坝初,身高增加1cm,體重增加0.5kg钾军,輸出吃完后的體重鳄袍;
學(xué)習(xí):每學(xué)習(xí)一次,3科成績各增加1分吏恭,輸出學(xué)習(xí)完后的3科成績拗小。

計算總分:算出3科成績的總分并打印樱哼;
計算平均分:算出3科成績的平均分并打印哀九。

總結(jié)

【學(xué)習(xí)筆記】(一)是對Objective-C的簡要介紹,是本人根據(jù)網(wǎng)絡(luò)資源的學(xué)習(xí),自我編輯的這份筆記唇礁,這也算是自己向Ios開發(fā)之路的第一步吧勾栗!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惨篱,一起剝皮案震驚了整個濱河市盏筐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌砸讳,老刑警劉巖琢融,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件界牡,死亡現(xiàn)場離奇詭異,居然都是意外死亡漾抬,警方通過查閱死者的電腦和手機(jī)宿亡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纳令,“玉大人挽荠,你說我怎么就攤上這事∑郊ǎ” “怎么了圈匆?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長捏雌。 經(jīng)常有香客問我跃赚,道長,這世上最難降的妖魔是什么性湿? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任纬傲,我火速辦了婚禮,結(jié)果婚禮上肤频,老公的妹妹穿的比我還像新娘叹括。我一直安慰自己,他們只是感情好宵荒,可當(dāng)我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布领猾。 她就那樣靜靜地躺著,像睡著了一般骇扇。 火紅的嫁衣襯著肌膚如雪摔竿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天少孝,我揣著相機(jī)與錄音继低,去河邊找鬼。 笑死稍走,一個胖子當(dāng)著我的面吹牛袁翁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播婿脸,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼粱胜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了狐树?” 一聲冷哼從身側(cè)響起焙压,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后涯曲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體野哭,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年幻件,在試婚紗的時候發(fā)現(xiàn)自己被綠了拨黔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡绰沥,死狀恐怖篱蝇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情徽曲,我是刑警寧澤态兴,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站疟位,受9級特大地震影響瞻润,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜甜刻,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一绍撞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧得院,春花似錦傻铣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蜕径,卻和暖如春两踏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背兜喻。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工梦染, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人朴皆。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓帕识,卻偏偏與公主長得像,于是被迫代替她去往敵國和親遂铡。 傳聞我的和親對象是個殘疾皇子肮疗,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,828評論 2 345

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