IOS-getter和setter方法

--点语法

可以不使用[student  age],用student.age来访问变量

虽然看起来student.age是直接访问变量,但本质还是调用了方法来访问变量


为什么要设计点语法?

方便程序员快速入手OC

简化程序设计

隐藏了内存管理细节

隐藏了多线程、同步、加锁细节

方法调用

Student *stu = [[Student alloc] init];

[stu setAge:100];

int age = [stu age];


点语法

stu.age = 100;

int age = stu.age;

点语法本质

其实点语法的本质还是方法调用

当使用点语法时,编译器会自动展开成相应的方法

stu.age = 10;    展开为  


[stu  setAge:10];


int  age = stu.age;     展开为

int  age = [stu  age];

@property

@property让编译器自动生成getter和setter的声明

@property int age;就可以代替下面的两行

- (int)age;   // getter

- (void)setAge:(int)newAge;  // setter

#import

@interface Student {

int age;

}

- (int)age;   // getter

- (void)setAge:(int)newAge;  // setter


@property int age;

@end

@synthesize

@synthesize让编译器自动实现getter和setter

@synthesize age;就可以代替

- (int)age{

return age;

}

- (void)setAge:(int)newAge{

age = newAge;

}

#import "Student.h"

@implementation Student 

@synthesize age;

- (int)age{

return age;

}

- (void)setAge:(int)newAge{

age = newAge;

}

@end


在类内部可以直接访问成员变量,如
age = 100;
int  temp = age + 10;
self.age不是直接访问成员变量,而是调用了getter或者setter方法
self.age = 100; 
// 相当于 [self  setAge:100];
// 不要在setAge:中写self.age = 100; 会造成死循环
int  temp = self.age + 10;  // int  temp = [self  age] + 10;

@synthesize age = _age; 展开


- (int)age{

return _age;

}

- (void)setAge:(int)newAge{

_age = newAge;

}


你可能感兴趣的:(ios,ios,ios平台,文档)