OC的開始(一)之----HelloWord與類的建立及使用
OC的全稱是Objective-C, 很明顯就是面向物件的C語言,是擴充C的面向物件程式語言。這裡就不再墨跡了,網上有太多的解釋,有興趣的朋友可以去查查。
進入正題,今天給想學OC的朋友講解一下怎麼建立一個OC工程和建立類並且例項化該類的過程。
在編寫程式之前,肯定要具備一個好的程式設計工具,這點你不用擔心,因為偉大的蘋果公司已經給我們準備好了:XCode(它是免費的,大家可以在App Store裡面下載)
一、首先建立一個工程,工程名叫Project_CreateClass
1.開啟Xcode工具,選擇第二項Create a new Xcode Project,顧名思義建立一個Xcode工程
2.選擇Command Line Tool 工程名:Project_CreateClass
3.恭喜你,你已經成功的建立了一個工程,我在這裡說一下這個工程主要組成部分
工程名:Project_CreateClass // 這裡是工程名 不用多說
|
|
資料夾:Project_CreateClass // 這裡是工程預設建立了一個資料夾名字就是工程名,當然我們可以在這個工程裡建立多個資料夾的。
|
|
main.m // 這個main檔案就是我們這個工程唯一一個原始檔了,注意OC的原始檔拓展名為.m。原始檔也叫可執行檔案,不懂請問度娘。
開啟main.m原始檔,程式碼如下:
下面讓我們來分析下main.m檔案裡程式碼的含義吧:// // main.m // Project_CreateClass // // Created by NewbieLi on 15/5/2. // Copyright (c) 2015年 NewbieLi. All rights reserved. // #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... NSLog(@"Hello, World!"); } return 0; }
#import <Foundation/Foundation.h>
#import關鍵字是用來匯入標頭檔案的,這個和Java中的import關鍵字效果差不多,不過OC不是開源的,所以,只能匯入標頭檔案,我們也只能看到標頭檔案中的定義,是看不到原始碼的。
這裡的Foundation.h標頭檔案是系統提供的最基本的框架,我們按住Command鍵,單擊就可以檢視Foundation.h中的所有定義了:
好啦,Hello World已經解決了,下面按command + R(執行快捷鍵一定要記住)執行你的程式檢視結果吧,執行結果如下:
2015-05-02 16:59:23.129 Project_CreateClass[2506:160795] Hello, World!
二、讓我們來建立自定義類:
1.在Xcode右邊區域,右擊滑鼠選擇New file....
2.然後選擇cocoa Class 選項 建立一個類,點選Next
3.Class名我這裡叫Student,點選Next並完成建立
4.建立完自定義類後,如圖:
這裡生成了兩個檔案(Student.h和Student.m),其中Student.h檔案是用來定義動作和成員變數的,但不會實現這個動作到底是幹嘛的,而Student.m檔案是現實Student.h定義的動作和成員變數的,下面我們開啟這兩個檔案分析下他們到底都是做什麼的。
5.開啟Student.h,程式碼如下:
//
// Student.h
// Project_CreateClass
//
// Created by NewbieLi on 15/5/2.
// Copyright (c) 2015年 NewbieLi. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Student : NSObject
@end
我們可以看到Student.h類的修飾符是interface,不難理解,這是一個介面類。(面向物件的三大特性:封裝,繼承和多型,後面會講到,這裡就不多做解釋了。)在java中介面的作用就是定義方法和定義此類的特性,但不去實現該方法,而方法的實現交給實現類來做,在OC中也是同樣的道理。
6.開啟Student.m,程式碼如下:
//
// Student.m
// Project_CreateClass
//
// Created by NewbieLi on 15/5/2.
// Copyright (c) 2015年 NewbieLi. All rights reserved.
//
#import "Student.h"
@implementation Student
@end
這個類就是實現Student.h的類了,好了,至此我們成功的建立了自定義類,接下來我們用程式碼去實現Student類的基本功能。
三、實現類的使用:
1.編寫Student.h類,程式碼如下:
//
// Student.h
// Project_CreateClass
//
// Created by NewbieLi on 15/5/2.
// Copyright (c) 2015年 NewbieLi. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Student : NSObject
{
/*
@public 和java一樣是公共的成員 可以被專案中所有類呼叫
@private 私有成員變數 只能在類的內部呼叫
@protected 受保護的成員變數,只能被該類和子類呼叫
不寫@public的話,預設是protected許可權
*/
@public // 訪問修飾符號表示下面的成員變數是公共的
// 學生姓名
NSString *_name;
// 學生年齡
int _age;
// 學生愛好
NSString *_hobby;
// 學生地址
NSString *_address;
}
// 方法宣告
-(void) sayHello; // 打招呼的方法
-(void) eat; // 吃飯的方法
@end
別急,我們來分析下這些程式碼都是什麼意思,首先,我們看到,在@interface下的“{}”中,聲明瞭若干變數來修飾學生的特性,在這裡這些修飾學生的變數我們就叫做成員變數。
@ public 就是用來說明這些成員變數的訪問等級,在程式碼中都有註解,這裡不多做解釋了。
下面我們來看類的實現部分,也就是方法的宣告:
// 方法宣告
-(void) sayHello; // 打招呼的方法
-(void) eat; // 吃飯的方法
減號(-)表明了該方法是例項方法,在類方法中則用(+)。括號中(void)表示返回型別,void表示無返回值,我們也可以寫成(int),(boolean),(NSString)等。eat和sayHello代表方法名。
2.類的具體實現
在Student.m實現具體方法,程式碼如下:
//
// Student.m
// Project_CreateClass
//
// Created by NewbieLi on 15/5/2.
// Copyright (c) 2015年 NewbieLi. All rights reserved.
//
#import "Student.h"
@implementation Student
// 實現方法:
// 實現eat方法
- (void) eat {
NSLog(@"學生開始吃飯了!");
}
// 實現sayHello方法
- (void) sayHello {
NSLog(@"學生說:你好!");
}
+ (Student *)newStudent {
return [[Student alloc] init];
}
@end
這裡就很好理解了,將介面類Student.h的eat和sayHello方法實現。
3.物件的例項化及方法的呼叫
下面我們在main.m中進行Studentdui物件的初始化及呼叫,程式碼如下:
//
// main.m
// Project_CreateClass
//
// Created by lanou3g on 15/5/2.
// Copyright (c) 2015年 NewbieLi. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Student.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 建立物件,完成物件的宣告,例項化,初始化
Student *stu = [[Student alloc] init];
// 呼叫物件的sayHello方法
stu.sayHello;
}
return 0;
}
執行看結果吧 command + R走起,結果:
2015-05-02 19:35:26.132 Project_CreateClass[3018:209079] 學生說:你好!
好了,至此我們成功的建立了一個物件並呼叫了它的sayHello方法。
四、下面來實現物件Student的成員變數的get,set方法。
1.在介面Student.h中定義get,set方法,程式碼如下:
// 學生姓名的get方法
- (NSString *) getName;
// 學生姓名的set方法
- (void) setName : (NSString *) name;
// 學生年齡的get方法
- (int) getAge;
// 學生年齡的set方法
- (void) setAge : (int) age;
// 學生愛好的get方法
- (NSString *) getHobby;
// 學生愛好的set方法
- (void) setHobby : (NSString *) hobby;
// 學生地址的get方法
- (NSString *) getAddress;
// 學生地址的set方法
- (void) setAddress : (NSString *) address;
// 打印出學生的基本資訊
- (void) StudentMessage;
2.在實現類Student.m中實現上面建立的方法,程式碼如下:
// 實現學生姓名的get方法
- (NSString *) getName {
return _name;
}
// 實現學生姓名的set方法
- (void) setName : (NSString *) name {
_name = name;
}
// 實現學生年齡的get方法
- (int) getAge {
return _age;
}
// 實現學生年齡的set方法
- (void) setAge : (int) age {
_age = age;
}
// 實現學生愛好的get方法
- (NSString *) getHobby {
return _hobby;
}
// 實現學生愛好的set方法
- (void) setHobby : (NSString *) hobby {
_hobby = hobby;
}
// 實現學生地址的get方法
- (NSString *) getAddress {
return _address;
}
// 實現學生地址的set方法
- (void) setAddress : (NSString *) address {
_address = address;
}
// 實現打印出學生的基本資訊
- (void) StudentMessage {
// 打印出學生的基本資訊
NSLog(@"學生姓名:%@,年齡:%d,愛好:%@,地址:%@", _name, _age, _hobby, _address);
}
3.在main.m檔案中對物件Student的成員變數進行賦值,並呼叫set,get,StudentMessage方法。程式碼如下:
//
// main.m
// Project_CreateClass
//
// Created by lanou3g on 15/5/2.
// Copyright (c) 2015年 NewbieLi. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Student.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 建立物件,完成物件的宣告,例項化,初始化
Student *stu = [[Student alloc] init];
// 呼叫物件stu的set方法
[stu setName:@"張三"];
[stu setAge:18];
[stu setHobby:@"籃球"];
[stu setAddress:@"地球村"];
// 運用get方法分別打印出物件stu成員變數的值
NSLog(@"該學生的姓名是%@", [stu getName]);
NSLog(@"該學生的年齡是%d", [stu getAge]);
NSLog(@"該學生的愛好是%@", [stu getHobby]);
NSLog(@"該學生的地址是%@", [stu getAddress]);
// 呼叫物件stu的StudentMessage方法,打印出該學生的所有資訊
stu.StudentMessage;
}
return 0;
}
這裡就和java差不多了(只是語法上存在這差距) [stu setName:@"張三"];給_name屬性賦值,[stu getName] 返回name值。
OK!由於本人第一次寫部落格,有不足的地方希望各位看官多多包涵。