標籤:objective-c
- 一 Objective-C概述
- 二 物件導向編程OOP Object Oriented Programming
- 三 類和對象
- 四 執行個體變數操作
一 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 <Foundation/Foundation.h>/* 類的聲明: * 聲明: 執行個體變數 和 方法 */@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!\n"); // C語言的輸出 NSLog(@"Hello!"); /* @相當於OC的一個標誌 * 後面不用加‘\n‘, 自動換行 */}- (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 <Foundation/Foundation.h>#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 <Foundation/Foundation.h>#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;}
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Objective-C學習筆記_類和對象