ios筆記--OC語法基礎知識筆記

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、銷燬對象

使用原因:因爲OCjava不一樣,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

13objective_C中用@interface和 @property 方式聲明變量的區別

1.在  @interface :NSObject{} 的括號中聲明變量,當然NSObject 是指一個父類,也可以是其他的。

2.另外一種是直接在 @interface : NSObject{}括號之後,用 @property 去定義一個變量。

提示:你可以單獨在@interface中定義變量,而不用@property定義;也可以只用@property去定義,而不在@interface中定義,當然用了@property去定義,一般要在.m文件中用@synthsize去合成相應的settergetter方法。否則會得到一個警告。

那這兩種方式有什麼區別呢。

1. 只在@interface中定義變量的話,你所定義的變量只能在當前的類中訪問,在其他類中是訪問不了的;而用@property聲明的變量可以在外部訪問。

2.用了@property去聲明的變量,可以使用“self.變量名”的方式去讀寫變量。而用@interface的方式就不可以。

14、OC註釋

#pragma mark  標籤:給方法標明一註釋,可以快速定位。

#pragma mark -標籤:帶下划算加上標籤即給註釋分組,給註釋分類,以便查看。

發佈了34 篇原創文章 · 獲贊 2 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章