Objective-C中的@property和@synthesize用法

來源:互聯網
上載者:User

標籤:

Objective-C中的@property和@synthesize用法

1.關鍵詞@property和@synthesize在Obj-c中是配對使用的,用於對聲明和實現的編碼簡化;
eg:
標頭檔(.h)中聲明
@property int personAge;
等價於:
-(int)personAge;
-(void)setPersonAge:(int)age;

檔案(.m)實現
@synthesize personAge;
等價於:
-(int)personAge
{
    return personAge;

-(void)setPersonAge:(int)age
{
    personAge = age;
}

2.聲明property的文法為:@property (參數1,參數2) 類型 名字;
eg:
@property (readwrite,copy)NSString *personName;
其中參數主要分為3類:
<1>.訪問器控制:(readwrite/readonly)
<2>.記憶體管理:(assign/retain/copy/strong/weak/unsafe_unretained)
<3>.原子性:(atomicity/nonatomic) 
readwrite
聲明此屬性為讀寫屬性,即可以訪問設定方法(setter),也可以訪問擷取方法(getter),與readonly互斥。
readonly
聲明此屬性為唯讀屬性,只能訪問此屬性對應的擷取方法(getter),與readwrite互斥。
assign
預設類型,用於實值型別(int、float、double和NSInteger,CGFloat等表示單純的複製),還包括不存在所有權關係的對象(常見的如delegate),聲明在setter方法中,採用直接賦值來實現設值操作。eg:
-(void)setPersonName:(NSString *)name
{
    personName = name;
}
retain
意味著執行個體變數要擷取傳入參數的所有權,聲明在setter方法中,需要對設過來的值進行retain 加1操作。eg:
-(void)setPersonName:(NSString *)name
{
    if (personName != name)
   {
        [personName release];
        personName = [name retain];
    }
    personName = name;
}
copy
調用此執行個體的copy方法,設定複製後的對象。實現參考retain。 
strong
是在ARC伴隨IOS引入的時候引入的關鍵字是retain的一個可選的替代。表示執行個體變數對傳入的參數要有所有權關係即強引用。strong跟retain的意思相同併產生相同的代碼,但是語意上更好更能體現對象的關係。
weak
與assign的效果相似,不同的是weak在對象被回收之後自動化佈建為nil。而且weak智能用在iOS 5或以後的版本,對於之前的版本,使用unsafe_unretained。
unsafe_unretained
weak的低版本替代。
nonatomic
在預設的情況下,通過synthesized 實現的 setter與getter都是原子性訪問的。
多線程同時訪問時,保障存取方法同時只被訪問一個線程訪問,eg:
[ _internal lock ]; // lock using an object-level lock  
id result = [ [ value retain ] autorelease ];  
[ _internal unlock ];  
return result;  
但如果設定nonatomic時,屬性的訪問為非原子性訪問,但訪問速度比atomic快,在單線程和明確只有一個線程訪問的情況下廣泛使用。

[email protected]
對於下面的@propety 
@property (nonatomic, copy) NSString *personName; 
預設合成的規則為:
@synthesize personName = _personName;
其中_personName是編譯器自動幫我們建立的;
@synthesize 中也可以定義 與變數名不相同的getter和setter的命名,籍此來保護變數不會被不恰當的訪問。

Objective-C中的@property和@synthesize用法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.