你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> @property 的使用

@property 的使用

編輯:IOS開發綜合

Objective-C語言關鍵詞,與@synthesize配對使用。

功能:讓編譯器自動編寫一個與數據成員同名的方法聲明來省去讀寫方法的聲明。

說白了,就是java中的getter setter方法。

聲明property的語法為:

  @property (參數1,參數2) 類型 名字;
  如:@property(nonatomic,retain) UIWindow *window;
  其中參數主要分為三類:
  讀寫屬性: (readwrite/readonly)
  setter語意:(assign/retain/copy)
  原子性: (atomicity/nonatomic)
  各參數意義如下:
  readwrite
  產生setter\getter方法
  readonly
  只產生簡單的getter,沒有setter。
  assign
  默認類型,setter方法直接賦值,而不進行retain操作
  retain
  setter方法對參數進行release舊值,再retain新值。
  copy
  setter方法進行Copy操作,與retain一樣
  nonatomic
  禁止多線程,變量保護,提高性能。
assign  通常用於基本類型,如int,bool,char等。

copy 通常用於NSString,NSNumber,NSArray等不變的類型。

retain 一般的NSObject 都用這個。

 下面解釋一下NSString類型的變量的setter方法為什麼要用copy.直接上代碼:


 

@interface

Person

@property

(nonatomic,
 retain) NSString

*name;

@end

 

Person
 *p = [[Person alloc] init];

NSMutableString

*name = [[NSMutableString

alloc] initWithString:@"hello"];

p.name
 = name;

 

[name
 appendString:@"
 world"];

NSLog(@"%@",
 p.name);  //
 此時p.name已變成hello world, 這不是我們想要的。
如果
 
@interface

Person

@property

(nonatomic,
copy)
NSString

*name;

@end

 

Person
 *p = [[Person alloc] init];

NSMutableString

*name = [[NSMutableString

alloc] initWithString:@"hello"];

p.name
 = name;

 

[name
 appendString:@"
 world"];

NSLog(@"%@",
 p.name);  //
 此時p.name仍為hello, 這是正確的。


NSString類型變量的值是不會發生變化的,但變量的內存地址是會發生變化的。copy的用法是復制內容,並且新分配一塊內存地址。而retain則是將輸入參數的內存地址復制一份,賦給成員變量。所以copy和retain的區別在於,如果傳入的參數是NSMutableString類型的話,這個參數一旦發生變化,成員變量的內容也會發生變化;而用copy,則不會發生這種情況(因為兩者的內存地址完全不同)。如果傳入的參數是NSString,則用copy和retain的效果完全一樣,沒什麼分別。所以NSString、NSArray等不可變的類型建議用copy。

以上代碼來自cocoachina

 

 

 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved