天天看點

OC_01_基礎

類和對象是⾯面向對象的核⼼心。
定義類,建立對象,使⽤用對象。      
類:具有相同特征和⾏行為的事物的抽象。      
⾯面向對象程式設計中使⽤用對象完成程式
      
開發中:先定義類,再建立對象,然後使⽤用對象。
      
定義類包含兩部分:接⼝口部分(.h)和實作部分(.m)。分開寫。 1. 接⼝口部分:對外聲明類的特征和⾏行為。(類似于說明書) 2. 實作部分:對内實作⾏行為。(内部的具體實作)  接⼝口部分标志:@[email protected]作⽤用:聲明類的執行個體變量和⽅方法,即特征和⾏行為。 包含内容:類名、⽗父類名、執行個體變量、⽅方法等。
實作部分标志:@[email protected]作⽤用:實作⽅方法,即實作類的⾏行為。 

                       


                       
                        
                         
                          
                           
類是模闆,對象是具體表現,任何對象都要占⽤用記憶體空間.建立對象分兩步:配置設定記憶體空間和初始化。

                           
配置設定記憶體空間:根據類中聲明的執行個體變量為對象配置設定記憶體,将所有執行個體變量置為預設值0,并傳回⾸首位址。

                           
初始化:為對象的執行個體變量設定初始值。

                           
建立對象:

                           
配置設定記憶體空間:Person * p = [Person alloc];

                           
初始化:p = [p init];通常這兩部操作需要連寫:

                           


                           
                            
                             
                              
                               
Person * p = [[Person alloc] init]; 

                               


                               
                                
                                 
                                  
                                   
+ (id)alloc; +表⽰示這個⽅方法屬于類,隻能類執⾏行。id傳回值類型,表⽰示任意類型的對象,即建立好的對象。

                                   
- (id)init; -表⽰示這個⽅方法屬于對象,隻能對象執⾏行。id傳回值類型,表⽰示初始化完成的對象。 

                                   


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

                                       
Person * p = [Person alloc]; 

                                       
先執⾏行“=”右側1. [Person alloc]傳回值是對象的⾸首位址,即對象。2. p是跟對象同類型的指針變量,存儲對象⾸首位址,代指對象。 

                                      
                                     
                                    
                                    
                                   


                                  
                                 
                                
                               
                               


                              
                             
                            
                           
                           


                          
                         
                        
                       
                       


                      
                     
                    
                         

OC的基本類型: 整形 NSInteger(該類型為長整形,輸出用%ld), 浮點型: CGFloat, 字元型: NSString(字元型一般都用指針來接收)

NSLog為輸出函數,與printf相似,但NSLog能自動換行

.h

#import <Foundation/Foundation.h>

@interface Student : NSObject

// 特征(成員變量)

{

    @public

    //成員變量

    //基本資料類型,比如NSInteger,CGFloat修飾的成員變量不加*

    NSString *_stuName;

    NSInteger _stuAge;

    CGFloat _stuScore;

    NSString *_stuHobby;

    NSString *_stuSex;

}

//行為

//方法的聲明

//打招呼

- (void)sayHi;

//玩

- (void)play;

@end

.m

#import "Student.h"

// .m是實作檔案,用來實作方法的

@implementation Student

//打招呼

- (void)sayHi

{

//    NSLog(@"大家好~");

    //方法(行為)的實作

    //列印對象的所有的成員變量

    NSLog(@"%@",_stuName);

}

@end

結束

.h檔案稱為接口檔案, .m是實作檔案,用來實作方法的,他們都以@end 結束.

Student是目前類的類名

類名和檔案名可以不一樣,但是為了友善管理,讓類名和檔案名相同

一個檔案裡隻有一個類(一個檔案可以定義多個類,但為了友善管理,隻定義一個類)

冒号後面的NSObject是目前類的父類,繼承與NSObject 

NSObject為根類,它沒有父類,類似于上帝

在main函數裡

//        建立對象

//        第一步操作:開辟堆區的記憶體空間

       Student *stu = [Studentalloc];

       NSLog(@"%p", stu);

//        第二部:進行初始化設定

        stu = [stuinit];

//        通常把建立對象的兩步和在一起寫

       Student *stu = [[Student alloc] init];

 Student繼承NSObject,是以Student可以使用NSObject裡所有的行為,是以可以直接使用alloc和init這兩種方法

//通路成員

        stu->_stuName =@"king";

        stu->_stuAge = 23;

       NSLog(@"%@", stu->_stuName);

       NSLog(@"%ld", stu->_stuAge);

//調用方法

        [stusayHi];

        [stuplay];

 //哪個對象來調用sayHi方法,就會列印哪個對象的成員變量的内容

        stu->_stuName =@"king";

        [stusayHi];

在.m檔案

//init已在NSObject聲明,不用再.h裡聲明

//重寫初始化方法 

- (id)init

{

   _stuName = @"queen";

   _stuAge = 22;

    _stuHobby = @"玩";

   _stuSex = @"女";

   _stuScore = 100;

    return self;//傳回自己

}

 @public公開的,被public修飾的成員變量誰都可以進行使用

    @protected是被保護的,如果沒有指定可見度,預設是被保護的

    他的使用範圍被限制在本類和它的子類可以使用

   @private 私有的,隻有本類可以使用

    @package是系統内部使用的成員變量,我們在外部不能使用,是以以後看系統的頭檔案的時候,如果遇見了@package,直接無視

總結:

面向對象和面向過程是兩種不同的程式設計思想,思考⾓角度不同,前者以
對象為中⼼心,後者以事件為中⼼心。
      
類是對象的抽象,對象是類的展現。面向對象程式設計中,先建立出對應
的類,再由類⽣成對象,進⽽完成我們的開發。
      

類包含接口和實作兩個部分,對象建立分兩步:建立對象、初始化。public修飾的執行個體變量,可以直接使用“—>”通路