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

一、格式与例子

  • 格式
    1 (参数1, 参数2, 参数3) 类型 变量名;

     

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

     

二、MRC下,特性

  • @property 声明的属性,在编译时刻会生成相应的成员变量(_XXX),除非,声明一个与属性同名的成员变量,则不会自动生成相应的_XXX成员变量。
  • @property 与 @synthesize 是成对出现的。
  • @property 特性是由xcode自动生成setter和getter方法的声明 。
  • @synthesize 特性是由xcode自动生成setter和getter方法的定义。
  • @property 是在@interfance与@end之间,并且,不能声明类成员作用域中。
  • @synthesize 是在@implemention与@end之间。
  • 使用@property定义的变量,可以在其它类中依然有效。
  • 在@property定义的变量,使用格式:self.*,而这种格式在@interface块作用域中定义的成员变量,不能如此使用。

三、在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方法声明。(上面第七行代码)

@synthesize 是由编译器在编译时刻为其生成getter and setter方法定义。其下为setter实现:

 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

 四、在ARC下,@property则做了三件事:

1. 由@property声明的属性,在编译时刻为其生成成员变量(_XXX),除非,声明一个与属性同名的成员变量,则不会自动生成相应的_XXX成员变量。

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

 

2. 由@property声明的属性,在编译时刻为其生成getter和setter方法的声明与定义。

posted @ 2015-07-24 09:43  naray  阅读(956)  评论(0编辑  收藏  举报