IOS 在MRC和ARC @property 與 @synthesize 特性

1、格式與例子

  • 格式
    1 (參數1, 參數2, 參數3) 類型 變量名;

     

  • 例子
    1 @property (nonatomic, assign, readonly) NSString *iText;

     

2、MRC下,特性

  • @property 聲明的屬性,在編譯時刻會生成相應的成員變量(_XXX),除非,聲明一個與屬性同名的成員變量,則不會自動生成相應的_XXX成員變量。
  • @property 與 @synthesize 是成對出現的。
  • @property 特性是由xcode自動生成setter和getter方法的聲明 。
  • @synthesize 特性是由xcode自動生成setter和getter方法的定義。
  • @property 是在@interfance與@end之間,而且,不能聲明類成員做用域中。
  • @synthesize 是在@implemention與@end之間。
  • 使用@property定義的變量,能夠在其它類中依然有效。
  • 在@property定義的變量,使用格式:self.*,而這種格式在@interface塊做用域中定義的成員變量,不能如此使用。

3、在MRC下,@property 與@synthesize原理

 1 @interface Demo : NSObject
 2 {
 3     NSString *name;
 4 }
 5 
 6 @property (nonatomic, copy) NSString *name;
 7 @end
 8 
 9 @implementation Demo
10 @synthesize name;
11 
12 - (void)print
13 {
14     NSLog(@"name : %@", self.name);
15 }
16 @end

@property 是由編譯器在編譯時刻爲其生成getter and setter方法聲明。(上面第七行代碼)xcode

@synthesize 是由編譯器在編譯時刻爲其生成getter and setter方法定義。其下爲setter實現:atom

 1 @implementation
 2 - (void)setName:(NSString *)aName
 3 {
 4     [aName retain];
 5     [iName release];
 6     iName = aName;
 7 }
 8 
 9 - (instancetype)getName
10 {
11     return [iName autorelease];
12 }
13 @end

 4、在ARC下,@property則作了三件事:spa

1. 由@property聲明的屬性,在編譯時刻爲其生成成員變量(_XXX),除非,聲明一個與屬性同名的成員變量,則不會自動生成相應的_XXX成員變量。code

1 @interface CWATempScheduleViewController
2 {
3   // Boolean _state; // 隱式生成
4 }
5 
6 @property (nonatomic, assign) Boolean state;
7 
8 @end

 

2. 由@property聲明的屬性,在編譯時刻爲其生成getter和setter方法的聲明與定義。blog

相關文章
相關標籤/搜索