概述:点语法的作用,@property @synthesize 如何使用,编译器如何对其进行展开,@property的其它属性
1)点语法的作用:
个人觉得点语法的引入就是为了方便不写[],以下面代码为切入点,介绍
int;
//[]调用实现方式 Dog *dog = [[Dog alloc] init]; [dog setAge:100]; int dogAge = [dog age]; NSLog(@"Dog Age is %d",dogAge); //.方法调用实现方式 dog.age = 200; dogAge = dog.age; NSLog(@"Dog Age is %d",dogAge);
点语法是编译器级别的:
dog.age = 200;
//等同于 [dog setAge:200];
dogAge = dog.age;
//等同于dogAge = [dog age];
编译器会把dog.age = 200;展开成[dog setAge:200];
2)@property属性
@property 属性是让编译器在类声明文件中自动产生set,get方法的声明
3)@synthesize属性
@synthesize属性是让编译器在类实现文件中自动产生set,get方法
举例:
@
=
//Dog.h //在类声明文件中 #import <Foundation/Foundation.h> @interface Dog: NSObject { int _age; } //setter and getter functions; //-(void)setAge:(int)newAge; //-(int)age; @property int age @end //Dog.m //在类实现文件中 #import "Dog.h" @implementation Dog @synthesize age = _age; // 1行 = 下面6行 //-(void)setAge:(int)newAge //{ // age = newAge; //} //-(int)age //{ // return age; //} @end
//Dog.h //在类声明文件中 #import <Foundation/Foundation.h> @interface Dog: NSObject { int age; } //setter and getter functions; //-(void)setAge:(int)newAge; //-(int)age; @property age @end //Dog.m //在类实现文件中 #import "Dog.h" @implementation Dog @synthesize age; // 1行 = 下面6行 //-(void)setAge:(int)newAge //{ // age = newAge; //} //-(int)age //{ // return age; //} @end
4)@property的其它属性
readwrite(缺省,可读写的,就是说可以使用get,set)
readonly 表示是只读,只能get
assign(缺省)
retain
copy
上面三个后面会学到用于内存管理,表示属性如何存储
nonatomic 表示不用考虑线程安全问题
getter=...,setter=... 这种可以重新设置get和set函数