黑馬程式設計師——Object-C的基礎學習——語言特性
初衷:
生平第一次寫技術部落格,真有點無所適從。關於Object-C,目前正打算開始學習,部落格的寫作,也權當日常的學習筆記,希望在不斷的積累過程中提高自己。在部落格這個平臺上,也讓自己不忘自己對於技術的初衷——Mide Wide Open。
tag1:Object-C和C(Objective-C的核心是C語言的,並基於C語言實現OOP的一些特性。Objective-C是對C語言的擴充套件)
與Object-C相比:
1.C是面向過程,Object是面向物件的;
2.陣列、函式、指標、結構、聯合的用法和 C 一樣;
3.迴圈語句(do while、while、for)、條件語句( if 語句(if-else、複合判斷條件等)、switch 語句 )、
Boolean(YES NO)、條件運算子、goto 語句、空語句、逗號表示式、sizeof 運算子、命令列引數、位操作都
和 C 一樣;
4.BOOL使用8位儲存,YES定義為1,NO定義為0,大於1不為YES,跟標準C不同。 若不小心將一個長於1位元組的整型值賦給BOOL,則只擷取低八位
Obejective-C中1不等於1,絕對不要將BOOL值和YES比較 。
tag2:Cocoa
Cocoa組成部分有:(1)Foundation框架(有很多有用的,面向資料的低階類和資料結構);(2)Application Kit(也稱AppKit)框架(包含了所有的使用者介面物件和高階類,例如NS……)(3)還有一個支援框架的套件,包括Core Animation和Core Image。
tag3.Objective-C常見語法說明:
1 標頭檔案引用使用 #import “檔名”或者 #import <檔名>的形式以確保每個標頭檔案僅被包含一次;
2 類宣告以 @interface 類名:繼承類 開頭,以 @end 結尾,類實現以@implementation 類名 開頭,以 @end 結尾;
3 例項方法,即成員方法,在方法名前面新增一個減號(-);類方法,在方法名前面新增一個加號(+);
4 類方法的呼叫格式為 [類名 類方法],成員方法呼叫格式為 [例項名 例項方 法],這種模式在ObjC中被稱為訊息機制,[物件 訊息]即給物件傳送了一個訊息,產生的 效果就是該物件呼叫了該類中定義的對應的例項方法。
tag4.下面通過一個例子比較一下OC和C++
---------------------------------------------------------------------------------------------------------------------------------
Object-C:
#import <Foundation/Foundation.h>
@interface Student : NSObject
{ //Objective-c的所有類都繼承於NSObject
// 成員屬性
NSString *name;
NSString *number;
}
//在Objective-C 2.0引入了屬性合成,相當於之前的get/set方法
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *number;
// 類方法
+ (NSString*)printName;
@end
Print類.m檔案(實現檔案)
#import "Print.h"
@implementation Student
@synthesize name;
@synthesize number;
// 類方法
+ (NSString*)printName
{
return (@"MikyLin'sBlog");
}
@end
Print 類使用
#import "Print.h"
int main(int argc, const char *argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
return NSApplicationMain(argc, (const char **)argv);
// 類方法呼叫
NSLog(@"PrintName = /"%@/"", [Student printName]);
// 初始化
Student* student1 = [Student alloc] init];
// 設定器呼叫
[student1 setName:@"MikyLin"];
[Student1 setNumber:@"001"];
// 獲取器呼叫
NSLog(@"Name = /"%@/"", [student1 name]);
NSLog(@"Number = /"%@/"", [student1 number]);
[pool drain];
return 0;
}
執行結果:
ClassName = "MikyLin'sBlog"
Name=MikyLin
Number=001
--------------------------------------------------------------------------------------------------------------------------------
C++:
#include<iostream>
using namespace std;
class Student
{
String name;
String number;
public:
Student(String a,String b);
String printName();
}
Student::Student(String a,String b)
{
name=a;
number=b;
}
String Student::printName()
{
return "MikyLin'sBlog";
}
void main()
{
String temp1,temp2;
temp1=Miky;
temp2="001"
Student student1(temp1,temp2);
printf("ClassName=%s\n",student1.printName() );
printf("Name=%s\n",student1.name);
printf("Number=%s\n",student1.number);
}