OC語言@property @synthesize和id

OC語言@property @synthesizeid

一、@property @synthesize關鍵字

注意:這兩個關鍵字是編譯器特性,讓xcode可以自動生成gettersetter的聲明和實現。

(一)@property 關鍵字

@property 關鍵字可以自動生成某個成員變量的settergetter方法的聲明

@property int age;

編譯時遇到這一行,則自動擴展成下面兩句:

- (void)setAge:(int)age;

- (int)age;

 

(二)@synthesize關鍵字

@synthesize關鍵字幫助生成成員變量的settergetter方法的實現。

語法:@synthesize age=_age;

相當於下面的代碼:

voidsetAge:(int)age

{

_age=age;

}

- (int)age

{

Return _age;

}

 

(三)關鍵字的使用和使用注意

類的聲明部分:

 

類的實現部分:

 

測試程序:

 

新版本中:

類的聲明部分:

 

類的實現部分:

 

測試程序:

 

(1)在老式的代碼中,@property只能寫在@interface  @end中,@synthesize只能寫在@implementation   @end中,自從xcode 4.4後,@property就獨攬了@property@synthesize的功能。

(2)@property int age;這句話完成了3個功能:1)生成_age成員變量的getset方法的聲明;2)生成_age成員變量setget方法的實現;3)生成一個_age的成員變量。

注意:這種方式生成的成員變量是private的。

(3)可以通過在{}中加上int _age;顯示的聲明_ageprotected的。

(4)原則:getset方法同變量一樣,如果你自己定義了,那麼就使用你已經定義的,如果沒有定義,那麼就自動生成一個。

(5)手動實現:

1)如果手動實現了set方法,那麼編譯器就只生成get方法和成員變量;

2)如果手動實現了get方法,那麼編譯器就只生成set方法和成員變量;

3)如果setget方法都是手動實現的,那麼編譯器將不會生成成員變量。

 

二、Id

id 是一種類型,萬能指針,能夠指向\操作任何的對象。

注意:id的定義中,已經包好了*號。Id指針只能指向os的對象。

id 類型的定義

Typedef struct objc object{

Class isa;

} *id;

侷限性:調用一個不存在的方法,編譯器會馬上報錯。


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