一 Objective-C概述 二 面向對象編程OOP Object Oriented Programming 三 類和對象 OC中類的定義 接口部分 實現部分 類和文件 創建對象 使對象 四 實例變量操作
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操作系統的主要編程語?。
因此,面向對象編程具有良好的可擴展性、可重用性。這一點在日後開發過程中可見一斑。
類和對象是面向對象的核心。步驟:定義類,創建對象,使用對象。
類:具有相同特征和行為的事物的抽象。
對象是類的實例。
類是對象的類型。
定義類包含兩部分:接口部分(.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];
先執行“=”右側
#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;
}