OCget、set点语法
先定义一个Student类:
1 @interface Student : NSObject{ 2 int _age; 3 } 4 -(void)setAge:(int)newAge; 5 -(int)age; 6 @end 7 8 //实现 9 @implementation Student 10 //set方法 11 -(void)setAge:(int)newAge{ 12 _age = newAge; 13 } 14 -(int)age{ 15 return _age; 16 } 17 @end
1 Student *stu = [[Student alloc] init]; 2 //设置age的值 3 [stu setAge:10]; 4 //取出age的值 5 int age = [stu age]; 6 NSLog(@"age is %i", age);
点语法访问age属性:
1 Person *p = [Person new]; 2 /* 3 调用set方法 4 [p setAge:20]; 5 [p setName:@"小明"]; 6 点语法:xcode的特性,xcode帮我们做代码替换 7 对象.属性名 8 注意,此时(p.age)并不是直接访问实例变量, 9 而是xcode 看到点语法(p.age)后会代换成 10 p.age-------->[p setAge:20] 11 */ 12 p.age = 20; 13 p.name = @"小明";
点方法可以设置变量属性也可以获取变量属性~
点语法注意:
点语法的本质是方法的调用,而不是访问成员变量,当使用点语法时,编译器会自动展开成相应的方法。
切记点语法的本质是转换成相应的set和get方法,如果没有set和get方法,则不能使用点语法。
@property关键字:
可以免去我们手动写get、set方法。
使用:
1 //@property 类型名 方法名 2 @property int age; 3 //相当于进行了age的set和get方法的声明
@property的使用
1)使用格式:
@property 数据类型名 方法名(去掉set)
2)作用
实现get和set方法的声明
1 @property int age; 2 /* 3 -(void)setAge:(int)age; 4 -(int)age; 5 */ 6 @property NSString *name; 7 /* 8 -(void)setName:(NSString *)name; 9 -(NSString *)name; 10 */
@synthesize作用:
生成get和set方法的实现部分
1 @implementation Person 2 @synthesize age; 3 @synthesize name; 4 5 @end
1 //@synthesize 帮我们实现了 实例变量的get和set方法 2 @synthesize age; 3 /* 4 相当于: 5 -(void)setAge:(int)age{ 6 self->age = age; 7 } 8 */
@property增强使用:
在xcode4.4以后做的增强
帮助我们生成get和set方法的声明
帮助我们生成get和set方法的实现
1 @interface Person : NSObject 2 //@property 的增强 3 //xcode4.4后 可以只使用@property 而不使用@synthesize 4 //声明和实现了_age ,_name的get和set方法 5 //操作的是带有下划线的实例变量 6 //如果我们当前类,没有下划线的实例变量,则系统会帮我们生成。 7 @property int age; 8 @property NSString *name; 9 10 -(void)test; 11 @end