類和對象是⾯面向對象的核⼼心。
定義類,建立對象,使⽤用對象。
類:具有相同特征和⾏行為的事物的抽象。
⾯面向對象程式設計中使⽤用對象完成程式
開發中:先定義類,再建立對象,然後使⽤用對象。
定義類包含兩部分:接⼝口部分(.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修飾的執行個體變量,可以直接使用“—>”通路