A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© chunhuayun 中级黑马   /  2015-10-5 15:18  /  666 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

@synthesize在.m文件中生成set和get方法的定义实现
1)用法一:@synthesize 方法名;生成新的成员变量,且与原成员变量无关
例如:
  1. #import <Foundation/Foundation.h>

  2. @interface Person : NSObject{
  3.     int _age;
  4.     NSString *_name;
  5. }
  6. @property int age; //生成_age的set和get方法
  7. @property NSString *name;

  8. -(void)test;
  9. @end

  10. @implementation Person
  11. @synthesize age;//自动生成实例变量age,跟_age没关系
  12. @synthesize name;//自动生成实例变量name,跟_name没关系
  13. //打印成员变量信息
  14. -(void)test{
  15.      NSLog(@"_name = %@, _age = %d",_name,_age);
  16.      NSLog(@"name = %@, age = %d",name,age);
  17. }
  18. @end
  19. int main(int argc, const char * argv[])
  20. {

  21.     @autoreleasepool {
  22.         
  23.         Person *p = [Person new];
  24.         p.age = 23;
  25.         p.name = @"Amos";
  26.         NSLog(@"name = %@, age = %d",p.name,p.age);
  27.         [p test];
  28.     }
  29.     return 0;
  30. }

  31. 打印
复制代码

结果;
2015-10-05 09:24:12.858 Day20[946:303] name = Amos,age = 23
2015-10-05 09:24:12.860 Day20[946:303] _name = (null),_age = 0
2015-10-05 09:24:12.860 Day20[946:303] name = Amos,age = 23
【分析结果】
@synthesize生成的age和name与_age和_name是没有关系的

1)用法二:@synthesize 方法名 = 成员变量名;与已有的成员变量建立关联
例如:

  1. #import <Foundation/Foundation.h>

  2. @interface Person : NSObject{
  3.     int _age;
  4.     NSString *_name;
  5. }
  6. @property int age; //生成_age的set和get方法
  7. @property NSString *name;

  8. -(void)test;
  9. @end

  10. @implementation Person
  11. @synthesize age = _age;//跟_age有关系
  12. @synthesize name = _name;//跟_name有关系

  13. //打印成员变量信息
  14. -(void)test{
  15.      NSLog(@"_name = %@, _age = %d",_name,_age);
  16.      //NSLog(@"name = %@, age = %d",name,age);//此时再用age和name会报错
  17. }
  18. @end
  19. int main(int argc, const char * argv[])
  20. {

  21.     @autoreleasepool {
  22.         
  23.         Person *p = [Person new];
  24.         p.age = 23;
  25.         p.name = @"Amos";
  26.         NSLog(@"name = %@, age = %d",p.name,p.age);
  27.         [p test];
  28.     }
  29.     return 0;
  30. }
复制代码


打印结果:
2015-10-05 09:28:37.234 Day20[975:303] name = Amos,age = 23
2015-10-05 09:28:37.236 Day20[975:303] _name = Amos,_age = 23
【结果分析】
此时@synthesize生成的方法就与原有得成员变量建立了关联,@synthesize指定了成员变量之后就不会默认生成新的成员变量了。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马