1. Objective-C是基於C語言的,所以完全兼容C語言,可以開發Mac OS X平臺和iOS平臺的應用程序。
2. OC中並沒有"包"的概念,也就是沒有命名空間機制,使用前綴可以有效的防止類名衝突。比如NSString(OC中的字符串類)、NSArray(OC的數組類),它們的前綴都是NS。
3. 爲了防止跟C語言、C++關鍵字衝突,OC的關鍵字都以@開頭。甚至字符串都是以@開頭的,比如@"Hello"是OC中的字符串,而"Hello"則是C語言中的字符串。
4. Objective-C和Java,C的相似點
(1)OC的nil 相當於java的null
(2)OC的self相當於java的this
(3)%i:相當於%d,表示輸出整型。
5.#import是一個預處理指令,作用跟C語言的#include類似,都是 包含(拷貝)某個文件的內容 到 預處理指令所在的位置。第1行的#import <Foundation/Foundation.h>表示包含Foundation框架中的Foundation.h文件。Foundation框架中包含了很多常用的類和函數,比如字符串處理類NSString、日誌輸出函數NSLog。它的重要程度相當於Java中的java.lang.*
6、類
在OC中,一般用2個文件來描述一個類:
(1) .h:類的聲明文件,只是聲明一下成員變量和方法,不作具體的實現。使用關鍵字@interface和@end。
(2) .m:類的實現文件,用於實現.h中聲明的方法。使用關鍵字@implementation和@end。
7、方法,方法的聲明和實現,都必須以 + 或者 - 開頭
+:表示類方法(靜態方法)。
-:表示對象方法(動態方法)。
8、成員變量
(1)@public :全局都可以訪問的變量。
(2)@protected:只能在類內部和子類中訪問的變量。如果成員變量什麼作用域都不寫,OC默認作用域是@protected
(3)@private:只能在類內部訪問的變量。c++默認的是private。
9、創建對象
創建原理:我們在創建一個對象時,首先要給對象分配一塊存儲空間,然後調用構造方法進行初始化。
實現舉例:
Book *book =[Book alloc] //給Book這個類分配一塊內存,OC的方法調用是用中括號[],括號裏面先寫方法的調用者Book,然後再寫要調用的方法名alloc;
book = [book init]; //調用Book對象的構造方法init進行初始化
上面兩步也可以連起來寫成:Book *book =[[Book alloc] init];
10、銷燬對象
使用原因:因爲OC跟java不一樣,java有自動垃圾回收機制,所以java開發根本不用考慮對象的生命週期,用完了系統會自動回收,但是OC不一樣,OC需要開發者自己回收內存,因此,當不再使用某個對象時,需要調用對象的release方法釋放掉此對象。代碼如下:
[book release];//釋放對象的內存
11、點語法
(1)概念:在Java中,我們可以通過"對象名.成員變量名"來訪問對象的公共成員變量,這個就稱爲"點語法"。在OC中,訪問對象的成員變量方式爲:Book->prict;
(2)點語法舉例如下:
Book.h聲明類文件
#include<Foundation/Foundation.h>
//放要聲明的變量
@interface Book : NSObject
{
int price;//不寫修飾符默認作用域是@protected
}
-(void) setPrice : (int) newPrice;//聲明setPrice:方法
-(int) price; //聲明price方法
@end
Book.m實現類文件
#include<Foundation/Foundation.h>
@implementation Book
-(void) setPrice : (int) newPrice
{
price =newPrice;
}
-(int) price
{
return price;
}
@end
main.m文件
#include<Foundation/Foundation.h>
#include”Book.h”//要使用Book類的方法就要導入該文件
int main(int argc,const char* argv[])
{
@autoreleasepool
{
Book *book = [[Book alloc] init]; //創建一個book對象
book.price = 10; //調用set方法,代碼相當於[book setPrice:10]
int price = book.price; //調用get方法,代碼相當於[book getPrice]
NSLog(@”price = %i”,price);
[book release]; //程序結束,釋放book對象佔用的內存
}
return 0;
}
12、構造方法
(1)概念:默認的構造方法,也就是init方法,它是不接收任何參數的。在實際開發中,爲了方便,會經常自定義構造方法。
(2)實現步驟:
(3)1.在Book.h文件中添加方法聲明
#include<Foundation/Foundation.h>
@interface
{
int _price;
}
- (id)initWithBook:(int)price;//id可以代表任何OC對象,這個構造方法接收一個int類型的參數,順便設置成員變量_book的值。
@end
2.在Student.m文件中實現構造方法
說明:如果在.m文件中的方法沒有在.h中聲明,那麼該方法是私有方法。
#include<Foundation/Foundation.h>
@implementation
-(id)initWithPrice(int)price
{
self =[super init];//調用父類的構造方法返回一個初始化好的Book對象
if(self!=nil) //如果初始化成功則進行賦值
{
_price= price; //給成員變量賦值
}
return self; //返回初始化並賦值過後的self
}
@end
3.在main.m文件中調用構造方法
#include<Foundation/Foundation.h>
int main(int argc,const char * argv[])
{
Book *book =[Book initWithPrice:10];//初始化一個book對象
NSLog(@”%@”,book); //輸出book對象
[book release];//釋放book 對象
return 0;
}
輸出結果爲:2014-06-19 14:46:49.896 構造方法[492:303] <Book: 0x100109910>
由以上輸出結果可以看出,輸出的對象只是對象的內存地址。我們可以通過重寫description的方法修改它的輸出格式。
description方法:該方法是父類打印一個對象的方法,可以通過重寫該方法修改對象輸出方式。
在Book.m文件中重寫description方法。代碼如下:
-(NSString *) description
{
//調用了NSString這個類的靜態方法stringWithFormat初始化一個字符串對
//象,並返回這個字符串
return [NSString stringWithFormat:@”price=%i”,_price];
}
再次運行main.m文件,輸出結果爲:
輸出結果爲:2014-06-19 14:46:49.896 構造方法[492:303] price=10
13、objective_C中用@interface和 @property 方式聲明變量的區別
1.在 @interface :NSObject{} 的括號中聲明變量,當然NSObject 是指一個父類,也可以是其他的。
2.另外一種是直接在 @interface : NSObject{}括號之後,用 @property 去定義一個變量。
提示:你可以單獨在@interface中定義變量,而不用@property定義;也可以只用@property去定義,而不在@interface中定義,當然用了@property去定義,一般要在.m文件中用@synthsize去合成相應的setter,getter方法。否則會得到一個警告。
那這兩種方式有什麼區別呢。
1. 只在@interface中定義變量的話,你所定義的變量只能在當前的類中訪問,在其他類中是訪問不了的;而用@property聲明的變量可以在外部訪問。
2.用了@property去聲明的變量,可以使用“self.變量名”的方式去讀寫變量。而用@interface的方式就不可以。
14、OC註釋
#pragma mark 標籤:給方法標明一註釋,可以快速定位。
#pragma mark -標籤:帶下划算加上標籤即給註釋分組,給註釋分類,以便查看。