程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Objective-C學習筆記_類和對象

Objective-C學習筆記_類和對象

編輯:關於C語言

Objective-C學習筆記_類和對象


一 Objective-C概述 二 面向對象編程OOP Object Oriented Programming 三 類和對象 OC中類的定義 接口部分 實現部分 類和文件 創建對象 使對象 四 實例變量操作

一 Objective-C概述

Cocoa和Objective-C是蘋果公司Mac OS X操作系統的核心。1980年初,Brad Cox發明了Objective-C,意將流行的、可移植的C語言和Smalltalk語言結合在一起;1985年,Steve Jobs成立NeXT公司,NeXT選擇Unix作為其操作系統,創建了NeXTSTEP(使用Objectiv-C開發的一款強大的用戶界面工具包);1988年,NeXT公司開始使用Objective-C開發;1996年蘋果公司收購了NeXT之後,NeXTSTEP被重命名為Cocoa,並得到了Macintosh編程人員的廣泛認可,即1996年Objective-C成為了蘋果主要編程語言。

Objective-C簡稱OC,擴充自C語?的面向對象編程語言。是OS X和iOS操作系統的主要編程語?。


二 面向對象編程OOP (Object Oriented Programming)

  面向過程 面向對象 特點 分析解決問題的步驟,實現函數,依次調用函數 分析某問題需要參與的對象,根據功能定義類,使?用對象的功能完成程序 側重點 實現功能 對象的設計 語言舉例 C語言 Objective-C, C++, Java等

因此,面向對象編程具有良好的可擴展性、可重用性。這一點在日後開發過程中可見一斑。


三 類和對象

類和對象是面向對象的核心。步驟:定義類,創建對象,使用對象。

類:具有相同特征和行為的事物的抽象。

對象是類的實例。

類是對象的類型。

OC中類的定義

定義類包含兩部分:接口部分(.h文件)和實現部分(.m文件)。

接?部分(.h文件):聲明類的特征和行為。 實現部分(.m文件):內部的具體實現。

接口部分

接?部分標志:@interface … @end

作用:聲明類的實例變量和方法,即特征和行為。

包含內容:類名、父類名、實例變量、方法等。

#import 

/* 類的聲明: 
 * 聲明: 實例變量 和 方法
 */
@interface Person : NSObject /* Person 類名
                              * NSObject 父類名
                              */
/* 聲明實例變量, 在{}中 */
{
    @public /* 實例變量可見度修飾符 */
    /* 姓名 */
//    char name[20];
    NSString *_name; /* OC中字符串使用NSString 
                      * * 說明是指針
                      * 實例變量必須使用_開頭
                      */
    NSString *_sex;

    /* 年齡 */
//    int _age;
    NSInteger _age; /* NSInteger 相當於C中的int類型 */
}

/* 聲明方法 */
/* 聲明說話打招呼的方法 */
- (void)sayHi; /* 方法的聲明類似於函數的聲明
                * - 號不能省略, 叫做-號方法.
                */

- (void)info;
@end

實現部分

實現部分標志:@implementation … @end

作?:實現?法,即實現類的?為。

#import Person.h

@implementation Person
/* 方法的實現 
 * 方法聲明之後必須實現, 否則編譯時出現警告
 */

- (void)sayHi
{
    printf(Hello!
); // C語言的輸出
    NSLog(@Hello!); /* @相當於OC的一個標志 
                       * 後面不用加'
', 自動換行
                       */
}

- (void)info
{
    NSLog(@姓名: %@, 性別: %@, 年齡: %ld, _name, _sex, _age); // %@ 相當於指代對象
}
@end

類和文件

類:@interface … @end @implementation … @end

?件:.h稱為接口文件或頭文件,.m稱為實現文件。默認設置如下:

使用類名命名文件。 .h文件管理類的接口部分;.m文件管理類的實現部分

文件和類本質沒有關系。

創建對象

類是模板,對象是具體表現,任何對象都要占用內存空間。

創建對象分兩步:分配內存空間和初始化。

分配內存空間:根據類中聲明的實例變量為對象分配內存,將所有實例變量置為默認值0,並返回首地址。

初始化:為對象的實例變量設置初始值。

分配內存空間:Person * p = [Person alloc];

初始化:p = [p init];

通常這兩部操作需要連寫:Person * p = [[Person alloc] init];

+ (id)alloc; +表示這個方法屬於類,只能類執行。id返回值類型,表示任意類型的對象,即創建好的對象。

- (id)init; -表示這個方法屬於對象,只能對象執行。id返回值類型,表示初始化完成的對象。

使?對象

指針存儲對象的首地址,代指對象。OC中使用指針代指對象,進行操作。

Person *p = [Person alloc];先執行“=”右側

[Person alloc]返回值是對象的?地址,即對象。 p是跟對象同類型的指針變量,存儲對象首地址,代指對象。
#import 
#import Person.h
int main(int argc, const char * argv[]) {
    @autoreleasepool {
/* 1.定義類
 * 2.創建對象
 * 3.使用對象
 */

/* 定義類, 創建一個類名的.h 和 .m文件
 * .h 聲明: 實例變量 和 方法
 * .m 實現部分: 實現方法
 */

/* 創建對象
 * 1. 導入.h 頭文件
 * 2. 開辟內存空間
 * 3. 初始化
 */
        /* Person : 類名
         * personOne : 對象名
         * alloc : 方法名, 作用開辟空間. + 方法, 只有類能使用, 返回值類型id, 對象類型.
         */
        Person *personOne = [Person alloc];
        personOne = [personOne init]; /* 初始化, init - 方法, 對象使用的方法, 返回值類型id, 對象類型 */

        /* 分配內存空間並初始化 */
        Person *personTwo = [[Person alloc] init];

        /* 使用對象(方法) */
        NSLog(@%d, %s, __LINE__, __func__); // 行數 調用模塊
        [personOne sayHi];
        [personOne info];
 }
    return 0;
}


四 實例變量操作

實例變量在初始化只做少量設置,後期還需要進?設置。

實例變量區分可見度,共三種public、protected、private,默認可見度為protected。

@public:實例變量訪問修飾符號(公有);public修飾的實例變量,可以直接使用“—>”訪問


#import 
#import Person.h
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        /* 賦值操作 */
        Person *personOne = [[Person alloc] init];
        [personOne info];

        /* 姓名賦值 */
        personOne->_name = @Zhang San;
        personOne->_sex = @man;
        personOne->_age = 20;

        /* 取值操作 */

        /* 輸出姓名 */
        NSLog(@姓名: %@, personOne->_name);
        NSLog(@性別: %@, personOne->_sex);
        NSLog(@年齡: %ld, personOne->_age);

        [personOne info];
    }
    return 0;
}
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved