@synthesize在.m文件中生成set和get方法的定义实现 1)用法一:@synthesize 方法名;生成新的成员变量,且与原成员变量无关 例如: - #import <Foundation/Foundation.h>
-
- @interface Person : NSObject{
- int _age;
- NSString *_name;
- }
- @property int age; //生成_age的set和get方法
- @property NSString *name;
-
- -(void)test;
- @end
-
- @implementation Person
- @synthesize age;//自动生成实例变量age,跟_age没关系
- @synthesize name;//自动生成实例变量name,跟_name没关系
- //打印成员变量信息
- -(void)test{
- NSLog(@"_name = %@, _age = %d",_name,_age);
- NSLog(@"name = %@, age = %d",name,age);
- }
- @end
- int main(int argc, const char * argv[])
- {
-
- @autoreleasepool {
-
- Person *p = [Person new];
- p.age = 23;
- p.name = @"Amos";
- NSLog(@"name = %@, age = %d",p.name,p.age);
- [p test];
- }
- return 0;
- }
-
- 打印
复制代码
结果; 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 方法名 = 成员变量名;与已有的成员变量建立关联 例如:
- #import <Foundation/Foundation.h>
-
- @interface Person : NSObject{
- int _age;
- NSString *_name;
- }
- @property int age; //生成_age的set和get方法
- @property NSString *name;
-
- -(void)test;
- @end
-
- @implementation Person
- @synthesize age = _age;//跟_age有关系
- @synthesize name = _name;//跟_name有关系
-
- //打印成员变量信息
- -(void)test{
- NSLog(@"_name = %@, _age = %d",_name,_age);
- //NSLog(@"name = %@, age = %d",name,age);//此时再用age和name会报错
- }
- @end
- int main(int argc, const char * argv[])
- {
-
- @autoreleasepool {
-
- Person *p = [Person new];
- p.age = 23;
- p.name = @"Amos";
- NSLog(@"name = %@, age = %d",p.name,p.age);
- [p test];
- }
- return 0;
- }
-
复制代码
打印结果: 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指定了成员变量之后就不会默认生成新的成员变量了。
|