1. 程式人生 > >OC語言@property @synthesize和id

OC語言@property @synthesize和id

rop 成了 都是 etag void ati ima 自動生成 能夠

OC語言@property @synthesize和id

一、@property @synthesize關鍵字

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

(一)@property 關鍵字

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

@property int age;

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

- (void)setAge:(int)age;

- (int)age;

(二)@synthesize關鍵字

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

語法:@synthesize age=_age;

相當於下面的代碼:

- (void)setAge:(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成員變量的get和set方法的聲明;2)生成_age成員變量set和get方法的實現;3)生成一個_age的成員變量。

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

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

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

(5)手動實現:

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

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

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

技術分享圖片

二、Id

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

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

id 類型的定義

Typedef struct objc object{

Class isa;

} *id;

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

OC語言@property @synthesize和id