OC語言@property @synthesize和idxcode
1、@property @synthesize關鍵字測試
注意:這兩個關鍵字是編譯器特性,讓xcode能夠自動生成getter和setter的聲明和實現。3d
(一)@property 關鍵字指針
@property 關鍵字能夠自動生成某個成員變量的setter和getter方法的聲明code
@property int age;對象
編譯時遇到這一行,則自動擴展成下面兩句:blog
- (void)setAge:(int)age;get
- (int)age;編譯器
(二)@synthesize關鍵字io
@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方法都是手動實現的,那麼編譯器將不會生成成員變量。
2、Id
id 是一種類型,萬能指針,可以指向\操做任何的對象。
注意:在id的定義中,已經包好了*號。Id指針只能指向os的對象。
id 類型的定義
Typedef struct objc object{
Class isa;
} *id;
侷限性:調用一個不存在的方法,編譯器會立刻報錯。