点语法,其本质还是调用setter和getter方法,编译器在遇到点语法时,会自动将其转换成调用setter或getter方法。
比如:
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
int _age;
}
- (void)setAge:(int)age;
- (int)age;
@end
@implementation Person
- (void)setAge:(int)age
{
_age = age;
}
- (int)age
{
return _age;
}
@end
int main()
{
Person *person = [[Person alloc] init];
// 不使用点语法
[person setAge:10]; // 设置age的值
int age1 = [person age]; // 获取age的值
// 使用点语法
p.age = 10; // 设置age的值
int age2 = p.age; // 获取age的值
return 0;
}
使用点语法时注意不要引发死循环,以下代码将会产生死循环。
- (void)setAge:(int)age
{
self.age = age;
}
- (int)age
{
return self.age;
}